我该如何处理类似123456
的数字并将其打印为1 2 3 4 5 6
?
最佳答案
正如“jamesdlin”在他的评论中提到的那样,GMan的方法可行,但是您需要将其存储在缓冲区中才能以正确的顺序打印(他的算法将打印“6 5 4 3 2 1”作为输入) 123456)。在这一点上,我想说,将sprintf用作他的答案中建议的“therefromhere”(如果这当然不是算法类的分配)将更加简单。
在我看来,最简单的方法是使用递归,这样您就可以按正确的顺序打印出数字,而无需使用缓冲区。
递归实现非常简单:
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;
}
输入:
输出:
编辑:感谢Steve Jessop在我不在时为正整数建议了一种正确的算法。我更改了上述方法,以正确打印出所有整数(正数和负数),而没有最后一个空格。
请注意,我们可以避免每次递归中都检查负值,只需对它进行一次检查(在main函数中或在任何地方),但我没有写它,因为我们在清晰度上会失去更多而不是在性能上有所收获。
关于c - 在C中的数字之间插入空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2084690/