一种可能的方法:
#include <stdio.h>
char *digits[10] = {
"Zero", "One", "Two", "Three", "Four",
"Five", "Six", "Seven", "Eight", "Nine"
};
int main() {
int num, digit;
long long tenth = 1;
printf("Please enter an integer: \n");
scanf("%d", &num);
while (tenth < num) {
tenth *= 10;
}
while (tenth > 1) {
tenth /= 10;
digit = num / tenth;
num %= tenth;
printf("%s ", digits[digit]);
}
return 0;
}
演示. 。现在进行解释:
首先,使用毫无意义 switch
这里:数字的性质是线性的,因此他们的名字可以(并且应该)存储在一系列字符串中(char *digits[10]
在此代码中)。然后,您将可以通过使用此数字作为索引访问此数组来获得特定数字的标签。
其次,该程序的关键问题是分别从输入中提取每个数字。从右到左行更容易 number % 10
, , 分配 number / 10
至 number
, ,重复),但是这里应该以另一种方式进行操作 - 从左到右。这就是我们要做的:
- 计算
tenth
- 10的第一个功率大于给定数字(例如,如果我们使用546,那将是1000)
- 在随后的每个迭代中:
- 分裂 tenth
到10
- 处理整数划分的结果 number
经过 tenth
- 分配给 number
其余的 number
除以 tenth
在第一次迭代中 tenth
变为100(1000/10),546/100为您提供5(由整数划分的整数是整数,小数是截断),546%100给您46-将其存储为第二个迭代的数字。
在第二次迭代中 tenth
变为10(100/10),46/10给您4,46%10给您6.下一个周期:10/10 => 1,6/1 => 6,6%1 => 0 tenth
已经等于1,并且循环被停止 - 随着所有数字的处理。