-1

我有一个程序要做作为我的家庭作业。程序很简单。它要求反转用户输入的数字,然后使用 while 循环打印。当用户输入以零开头的数字时,就会出现问题。

例如:

Enter the number: 0089
The reversed number is : 9800

这就是输出应该的样子。相反,我得到“98”作为答案。

并提前感谢。

4

3 回答 3

5

当被要求做别人的作业时,我喜欢设计一种钝而紧凑的方法来做。

void reverseNumber(void)
{
    char c;
    ((c=getchar()) == '\n')? 0 : reverseNumber(), putchar(c);
}
于 2013-08-13T13:01:54.843 回答
4

与其将 0089 输入读取为数值,不如将其读取为字符数组。这样零就不会被删除。

于 2013-08-13T12:58:12.533 回答
1

将数字读取为字符串。

然后使用atoi()(stdlib.h) 在字符串中生成一个整数:

/* int atoi (const char *) */

这是完全符合您的问题要求的工作代码:

//  input: 0321
// output: 1230

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

int main()
{
    char str[80] = {0}, temp_str[80] = {0};
    int num, i, length = 0, temp_length = 0;

    printf("Enter a reversed number (e.g. 0089): ");
    scanf("%s", str);

    length = strlen(str);
    temp_length = length;

    printf("string_length: %d\n", length);
    for ( i = 0; i < length; i++ ) {
        temp_str[i] = str[temp_length - 1]; 
            /* The string length is 4 but arrays are [0][1][2][3] (you see?),
               so we need to decrement `temp_length` (minus 1) */ 
        temp_length--;
    }

    printf("temp_str: %s\n", temp_str);

    num = atoi(temp_str);
    printf("num:  %d\n", num);

    return 0;
}
于 2013-08-13T12:59:29.530 回答