我有一个程序要做作为我的家庭作业。程序很简单。它要求反转用户输入的数字,然后使用 while 循环打印。当用户输入以零开头的数字时,就会出现问题。
例如:
Enter the number: 0089
The reversed number is : 9800
这就是输出应该的样子。相反,我得到“98”作为答案。
并提前感谢。
当被要求做别人的作业时,我喜欢设计一种钝而紧凑的方法来做。
void reverseNumber(void)
{
char c;
((c=getchar()) == '\n')? 0 : reverseNumber(), putchar(c);
}
与其将 0089 输入读取为数值,不如将其读取为字符数组。这样零就不会被删除。
将数字读取为字符串。
然后使用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;
}