我有一个任务,我必须编写一个程序,该程序从终端输入一个整数并提取并显示英文的整数。我不能使用数组或递归,我们只是从编程开始。
例如:“ 123”返回“一二三”
我的程序运行良好(大部分情况下),但是问题是,当您在终端中输入“ 0123”之类的程序时,程序将返回“八三” ... WTH?
这是我的代码:
// Program that takes an integer and displays each digit in English
#include <stdio.h>
int main (void)
{
int num, digit;
int reversed = 0, backupZero = 0;
printf("Please enter an integer:\n");
scanf("%i", &num);
if (num == 0) // In case the input is just "0"
{
printf("zero");
}
while (num > 0) // Loop to reverse the integer
{
digit = num % 10;
reversed = (reversed * 10) + digit;
if ((reversed == 0) && (digit == 0)) // If the integer finishes in zero
{
++backupZero; // Use this to add extra zeroes later
}
num /= 10;
}
while (reversed > 0)
{
digit = reversed % 10;
reversed /= 10;
switch (digit)
{
case 1:
printf("one ");
break;
case 2:
printf("two ");
break;
case 3:
printf("three ");
break;
case 4:
printf("four ");
break;
case 5:
printf("five ");
break;
case 6:
printf("six ");
break;
case 7:
printf("seven ");
break;
case 8:
printf("eight ");
break;
case 9:
printf("nine ");
break;
default:
printf("zero ");
break;
}
}
for (int counter = 0; counter < backupZero; ++counter) // Prints the extra zeroes at the end
{
printf("zero ");
--backupZero;
}
printf("\n");
return 0;
}
我承认我可能不擅长数学。
当您用
scanf("%i", &num);
您要scanf
推断数字的底数。开始与数字0
其次是其他数字解释为八进制。所以0123
不一样123
。实际上是83
。
0100 = 64
020 = 16
03 = 3
---------
0123 = 83
要将数字读取为以10为底的数字,请使用
scanf("%d", &num);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句