我如何选择123456
这样的数字并将其打印为1 2 3 4 5 6
?
答案 0 :(得分:10)
答案 1 :(得分:7)
正如'jamesdlin'在他的评论中提到的,GMan的方法可行,但是你需要将它存储在一个缓冲区中才能以正确的顺序打印出来(他的算法将打印出来“6 5 4 3 2 1 “输入123456)。在这一点上,我会说使用sprintf会更简单,因为在他的回答中提到了“wherehere”(如果这当然不是算法类的分配)。
在我看来,最简单的方法是使用递归,这样就可以在不使用缓冲区的情况下以正确的顺序打印数字。
递归实现非常简单:
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
编辑:感谢Steve Jessop在我不在的时候为正整数提出了正确的算法。我改变了上面的方法,正确地打印出所有整数(正数和负数),没有最后一个空格。
请注意,我们可以避免在每次递归中检查负值,只需检查一次(在主函数或任何地方),但我没有写它,因为我们会在清晰度上损失更多而不是性能增益。
答案 2 :(得分:2)
一种常见的方法是提取每个数字,然后打印该数字。我不会给你代码,但它是实现的版本:
int d; // your number
/* While `d` is not zero */
/* Modulus `d` with 10 to extract the last digit */
/* Print it, with your space */
/* Divide by 10 to remove the last digit */
/* Repeat */
这将是倒退。我会把它作为练习让你解决这个问题。 (提示:在循环中,将结果放入一个字符数组中,当你完成数组的最后一个索引并向后打印时。)
答案 3 :(得分:2)
char buffer[50];
int myNum = 123456;
int n;
int i;
n = snprintf(buffer, sizeof buffer, "%d", myNum);
for (i = 0; i < n; i++)
{
putchar(buffer[i]);
putchar(' ');
}
putchar('\n');
答案 4 :(得分:0)
int number = 123456;
char strNumber[64];
strNumber[0] = '\0';
sprintf_s(strNumber, "%d", number);
int i = 0;
while(strNumber[i] != '\0')
printf("%c ", strNumber[i++]);
答案 5 :(得分:0)
这仅适用于无符号整数:
#include <stdio.h>
#include <math.h>
void print_number(unsigned int number) {
int n = number, c = 0, p;
while (n > 0) {
n /= 10;
c++;
}
for (n = c - 1; n >= 0; n--) {
p = pow(10, n);
printf("%d ", number / p);
number -= number / p * p;
}
printf("\n");
}
int main(int argc, char *argv[]) {
print_number(1);
print_number(12);
print_number(123);
print_number(1234);
print_number(12345);
print_number(1234567);
print_number(12345678);
print_number(123456789);
return 0;
}
答案 6 :(得分:0)
#include <stdio.h>
int main ()
{
int a, b, c, d, e;
printf("Write a number of four figures\n");
scanf("%d", &a);
printf("Your number is:\n");
b = (a - (a % 1000)) / 1000;
c = ((a - (a % 100)) / 100) - b * 10;
d = ((a - (a % 10)) / 10) - b * 100 - c * 10;
e = (a - b * 1000 - c * 100 - d * 10);
printf("%d\t%d\t", b, c);
printf("%d\t", d);
printf("%d", e);
return 0;
}