2

我想知道是否有一种方法可以按字母顺序打印数字,即 123应该打印为one two three.

唯一的条件是我们不应该反转数字并且不应该使用数组。

我只知道这两种方式:

  • “倒数”,即取最后一位,将其截掉。对于每个截止数字,可以使用一个数组来查找正确的字符串。
  • 使用switch和很多cases

有任何想法吗?

4

2 回答 2

1

数百个地方:

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

于 2013-09-11T15:18:02.907 回答
0

不一定是最简单的路线,但您可以创建一个函数,例如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;
}
于 2013-09-11T15:16:29.457 回答