我刚开始学习C ++。我正在阅读跳转到C ++。 问题涉及第7章问题1:
实施将数字转换为文本的源代码。
这是我到目前为止所做的:
#include <iostream>
#include <string>
using namespace std;
int LessThen20 (int i);
int main () {
int i = 1;
cout << "please input a number: \n";
cin >> i;
if (i < 20) {
cout << LessThen20(i);
}
if ( i >= 20 && i < 30) {
cout <<"Twenty " ??
}
}
int LessThen20 (int i) {
if (i == 0) {
cout << "zero" <<endl;
}
if ( i == 1) {
cout << "one"; <<endl;
}
if (i == 2) {
cout << "two"; <<endl;
}
if ( i == 3) {
cout << "three"; <<endl;
}
if (i == 4) {
cout << "four"; <<endl;
}
if ( i == 5) {
cout << "five"; <<endl;
}
if (i == 6) {
cout << "six"; <<endl;
}
if ( i == 7) {
cout << "seven"; <<endl;
}
if (i == 8) {
cout << "eight" <<endl;
}
if ( i == 9) {
cout << "nine"; <<endl;
}
if (i == 10) {
cout << "ten"; <<endl;
}
if ( i == 11) {
cout << "eleven"; <<endl;
}
if (i == 12) {
cout << "twelve"; <<endl;
}
if ( i == 13) {
cout << "thirteen"; <<endl;
}
if (i == 14) {
cout << "fourteen"; <<endl;
}
if ( i == 15) {
cout << "fifteen"; <<endl;
}
if (i == 16) {
cout << "sixteen"; <<endl;
}
if ( i == 17) {
cout << "seventeen"; <<endl;
}
if (i == 18) {
cout << "eighteen"; <<endl;
}
if ( i == 19) {
cout << "nineteen"; <<endl;
}
}
只要输入的数字小于20,我的程序就可以正常工作。但是我不知道如何将数字25变成“二十五”。
任何帮助将不胜感激!
答案 0 :(得分:6)
二十岁以下的一切都是特例。但是,您应该拥有一个包含"zero", "one", "two",
等数据结构并且索引到数据结构中,而不是拥有一个巨大的if链。 (例如,矢量,地图或数组。如果您不知道如何使用其中任何一种,我建议您学习,因为数据结构在所有编程语言中非常有用,您将需要学习它们。)
二十岁以上,我们必须更一般地开始编码。我们必须将创建单词版本分成几部分:
1)获取单位列。您可以使用数字%10来仅获取单位,因为%10在除以10后得到余数。您可以使用单位数来索引前面的零,一,二等数据结构并获得要打印的内容。 / p>
2)获得十列。类似的想法 - (数字/ 10)%10。现在将数十列索引为数据结构,如“”,“十”,“二十”,“三十”,......在0,1,2,3 ... < / p>
3)......等等每一个更高的列。
答案 1 :(得分:4)
如果第二个数字大于2,你只需要以“二十”相同的方式连接,但有三十,四十等等。
同样的方法可以应用于数百,数千等。
如果将“前缀”存储在可以直接编入索引的某种数组中(例如myTensArray [3]给出“30”)这可能是最好的。
答案 2 :(得分:1)
有很多解决方案但是因为我认为你想在这里自己实现一些想法(仅适用于整数类型): 首先,我将确定存储字符串所需的char数组的长度。位数可以通过
确定int digits = ((int)log10(number))+1; //+1 if number is negative
接下来你想把你的号码分成数字
for(int i = digits - 1; number; i--){ //until number is 0
//charFromDidgit(...) returns the char for a nuber between 0 and 9 (e.g. '3' for 3)
yourCharArray[i] = charFromDigit(number%10);
number /= 10;
}
别忘了在数组的末尾附加终止0
答案 3 :(得分:-1)
如果您想要一种仅使用原始概念的方法,您可以简单地使用一个循环来检查该数字是否超过某个值,然后根据它的大小从该数字中减去。每次循环运行后,使用变量保存从数字中减去的次数。
例如:
//Your number is greater than 1 billion
while ( x > 1000000000 ) {
billions += 1
x -= 1000000000
}
//Your number is greater than 1 million
while ( x > 1000000 ) {
millions += 1
x -= 1000000
}
//Your number is greater than 1 thousand
while ( x > 1000 ) {
thousands += 1
x -= 1000
}
等等。然后你把它变成了一个小得多的问题,因为你现在只需要处理三位数的数字(你可以使用上面完全相同的步骤,只有数十和数百)。您也可以使用模数运算符。它更有效,但实施起来更难。