Как упомянул в своем комментарии «jamesdlin», подход GMan сработает, однако вам нужно будет сохранить его в буфере для распечатки в правильном порядке (его алгоритм распечатает »6 5 4 3 2 1 «для ввода 123456). В этот момент я бы сказал, что было бы намного проще просто использовать sprintf, как было сказано в ответе «оттуда» (если, конечно, это не назначение класса алгоритма).
На мой взгляд, самый простой способ сделать это - использовать рекурсию, так как вы можете печатать цифры в правильном порядке без использования буферов.
Рекурсивная реализация очень проста:
void PrintfRecursivly(int number)
{
if (number < 0)
{
number *= -1;
printf("- ");
}
if (number > 10)
{
PrintfRecursivly(number / 10);
printf(" ");
}
printf("%d", number % 10);
}
int main()
{
int number = -78900456;
PrintfRecursivly(number);
return 0;
}
Ввод:
-78900456
Выход:
- 7 8 9 0 0 4 5 6
EDIT : Спасибо Стиву Джессопу, который предложил правильный алгоритм для натуральных чисел, пока меня не было. Я изменил описанный выше метод для правильной печати всех целых (положительных и отрицательных) без последнего пробела.
Обратите внимание, что мы можем избежать проверки на отрицательные значения в каждой рекурсии, выполнив проверку только один раз (в основной функции или где-либо еще), но я не написал ее, потому что мы потеряли бы больше ясности, чем выигрыша в производительности.