我该如何处理类似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/

10-12 12:35
查看更多