我想知道是否有一种方法可以按字母顺序打印数字,即
123
应该打印为one two three
.
唯一的条件是我们不应该反转数字并且不应该使用数组。
我只知道这两种方式:
- “倒数”,即取最后一位,将其截掉。对于每个截止数字,可以使用一个数组来查找正确的字符串。
- 使用
switch
和很多case
s
有任何想法吗?
数百个地方:
int hundreds = my_num / 100 //Needs "/", NOT "%"
if(hundreds == 0)
cout << "zero";
else if(hundreds == 1)
cout << "one";
//repeat for 2-9
可以调整此过程以执行其他数字。还值得一提的是 if/else 块 a) 如果愿意,可以使用 switch/case 来完成,并且 b) 可以很容易地制成一个单独的函数,以避免一遍又一遍地重复代码块,我为了清楚起见,我写的和我写的一样多。请注意,这假设您“翻译”的数字是整数。对于整数,“/”运算符将返回不带余数的全商,例如 123 / 100 = 1,而不是 1.23
不一定是最简单的路线,但您可以创建一个函数,例如DigitToWord
使用 switch 语句将数字 0、1、2、...等作为其单词。然后我建议对数字使用 for 循环,连续除以 10 并为循环取 mod:
int num; //my number i want to print
int div = pow(10, (int)log10(num)); //find the largest power of 10 smaller than num
while(num > 0) {
int remainder = num%div;
int digit = num/div;
DigitToWord();
num = remainder;
}