Разбить число на цифры
Я уже как-то говорил, но повторюсь: руки за такое надо отрывать.
Поясни, не будь голословным.
Алгоритм преобразования числа в строку разбивает число на отдельные цифры, но помимо этого он делает множество других операций, после чего склеивает строку из отдельных символов.
Зачем использовать этот алгоритм, как первый шаг обработки, далее "откатывая" остальные операции, если сам метод разбиения числа на цифры прост и никак не связан с символьным представлением?
Трансформация данных всегда связана с дополнительными затратами и рисками, и не следует её делать в тех случаях, когда в ней нет необходимости, а тем более, когда за трансформацией следует обратная трансформация.
Как метафора: для того, что бы быть воспитанным, нужно извиниться, если наступил кому-то на ногу. Однако, воспитанные люди не наступают на ногу специально, что бы потом извиниться.
Взгляните на код рассматриваемой задачки . Не уверен , что она решена .
Рекурсии нет ( она не нужна ), ф - ии itoa( плохой стиль ) - тоже , но решается только для 9
( некоторых 10 )значных и меньших чисел :( Пытался <climits>... Но тщетно ... Может я не правильно
что - то сделал ? Где ошибка ? В связи с этой возникает другая более интересная задача о длинных
числах и операциях с ними .
Например , если сделать число float - как тогда быть с операцией " % "?
// VS2003 :
#include "windows.h"
using std::cout;
using std::endl;
using std::cin;
inline char *rus( char *s ) // русский текст в консоли
{
char *t = new char[strlen(s) + 1];
CharToOem(s,t);
return t;
}
inline void func( unsigned a );// ф-ия разбиения
int _tmain( int argc, _TCHAR* argv[] )
{
unsigned value;
cout<<rus ( "\tвведите число ..." )<<endl;
cin>>value;
func( value );
cout<<endl;
return 0;
}
inline void func( unsigned a )
{
unsigned b = a;int size = 0;
do // находим кол - во цифр в числе
{
b /= 10;
++size;
}while( b>0 );
cout<<rus ("... разбиение ...")<<endl;
int *c = new int[size];
for( int i = 0; i<size; ++i ){ // разбиваем
c = a % 10;
a /= 10;
cout<<c<<" ";
}
}
Zorkus , в одном из постов начал было говорить о длинных числах , но тема прервалась ...
Можно по - подробнее с этого места ,пожалуйста .
Спасибо.