5

我将如何获取一个数字123456并将其打印为1 2 3 4 5 6

4

7 回答 7

10

执行此操作的最简单方法(尽管不是最快的)可能是首先sprintf将数字放入字符串缓冲区,然后循环遍历缓冲区- 一次输入printf一个字符和一个空格。

printf在标准格式中没有内置的方法可以做到这一点。

于 2010-01-18T08:31:55.333 回答
7

正如“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;
}

输入:

-78900456

输出:

- 7 8 9 0 0 4 5 6

编辑:感谢史蒂夫·杰索普(Steve Jessop),当我不在时,他为正整数提出了正确的算法。我更改了上述方法以正确打印所有整数(正数和负数),没有最后一个空格。

请注意,我们可以避免在每次递归中检查负值,只需检查一次(在主函数或任何地方),但我没有写它,因为我们会失去更多的清晰度而不是性能。

于 2010-01-18T08:58:45.957 回答
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 */

这将是倒退的。我会把它作为练习留给你来解决这个问题。(提示:在循环中,将结果放入字符数组中,完成后从数组的最后一个索引开始并向后打印。)

于 2010-01-18T08:34:56.600 回答
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');
于 2010-01-18T08:55:20.957 回答
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++]);
于 2010-01-18T09:00:53.950 回答
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;
}
于 2010-01-18T14:42:11.513 回答
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;
}
于 2018-10-11T00:17:54.917 回答