1

我正在寻找C反转数字的程序,如下所示:

如果我输入:

123456

那么结果将是:

654321

请帮我。

4

8 回答 8

11

这是这个复杂问题的简单解决方案:

#include <stdio.h>

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    }
}


输出换行符的新版本:

#include <stdio.h>
#include <stdlib.h>

static void newline(void)
{
    printf("\n");
}

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    } else {
        atexit(newline);
    }
}
于 2010-02-28T14:14:14.563 回答
7

如果您的教授对您的表现进行评分,请在另一个问题中尝试ggf31416 解决此问题的方法:

int FastReverse(int num) {
    int res = 0;
    int q = (int)((214748365L * num) >> 31);
    int rm = num - 10 * q;
    num = q;
    if (rm == 0) return -1;
    res = res * 10 + rm;
    while (num > 0) {
       q = (int)((214748365L * num) >> 31);
       rm = num - 10 * q;
       num = q;
       res = res * 10 + rm;
    }
    return res;
}

优化®

当它绝对,肯定必须在这一纳秒内完成。

于 2010-02-28T14:30:16.023 回答
5

用于% 10获取最后一位数字。输出它。将数字除以 10 得到除最后一位以外的所有数字。用于% 10获取最后一位数字。以此类推,直到数字变为 0。

于 2010-02-28T14:08:13.423 回答
2

这是另一种可能性。它是非递归的,也许代码少一点。代码注释中有一个例子来解释逻辑。

/*
    Example: input = 12345

    The following table shows the value of input and x
    at the end of iteration i (not in code) of while-loop.
    ----------------------
    i   |   input  |    x
    ----------------------
    0       12345       0
    1        1234       5
    2         123      54
    3          12     543
    4           1    5432
    5           0   54321
    ----------------------
*/
uint32_t
reverseIntegerDigits( uint32_t input )
{
    uint32_t x = 0;

    while( input )
    {
        x = 10 * x + ( input % 10 );
        input = input / 10;
    }

    return x;
}
于 2010-02-28T17:57:35.287 回答
1

A使用or读取 char 数组中的数字scanf("%s", A),更好的是,fgets通过输出从strlen(A) - 1to开始的每个字符来反转 char 数组0

于 2010-02-28T14:14:29.493 回答
0

strrev 函数反转字符串。如果性能不是问题,那么例如您可以执行 itoa,然后是 strrev,然后是 atoi。但即使没有 strrev,任务也非常简单。

于 2010-02-28T14:15:37.683 回答
0

看起来像一个非常古老的线程。但是我在这里提到了解决方案,并且在测试了本网站上作为解决方案可用的不同程序之后,不得不编写自己的解决方案。我意识到如果数字以零结尾,则将数字视为 int 不会产生必要的数字反转。所以我决定把这个数字当作一个字符串,然后把数字颠倒过来。这样,我从字符串的角度得到了数字的精确反转,而不是在数字开头丢弃零的数学数字。

#include <stdio.h>
#include <string.h>

main()
{

    char num[20];
    int x=0,slen;

    printf("Enter the number you want to reverse :");
    scanf("%s",num);
    slen=strlen(num);


    char *pointertoarray = &num[slen];

    for (x=slen;x>=0; x--){ printf("%c",*pointertoarray); pointertoarray--; }
    printf("\n");

}
于 2013-12-15T17:09:49.250 回答
0
  1. 计算 number 的位数并存储在 count 变量中
  2. 提取变量中的单个数字
  3. 使用电源功能。

    while(count>=1)
    {
      var = num % 10;
      sum = sum + var * pow(10, count - 1);
      num =num / 10;
      count--;
    }
    
于 2017-06-15T19:15:19.977 回答