我正在编写一个将数字转换为文本的c ++程序。
我遇到两个问题(编辑:现在只有一个):
第一个问题是程序只写出数字为1-19正确,一切从20-99开始,例如我写34时的例子,我得到的answear是三十而不是三十四,因为它应该。三十岁之后,它就会出现错误并且程序关闭。 [问题已解决]
第二个问题是我希望我能在0-999而不仅仅是99之间写数字但我不知道该怎么做
#include <iostream>
#include <string>
using namespace std;
int main()
{
int num, Ldight, Rdight;
string ones[] = {"zero", "one", "two", "three", "four",
"five","six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen"};
string tens[] = {"twenty","thirty","fourty","fifty", "sixty","seventy","eighty", "ninety"};
cout << "Pick a number between 1-99: ";
cin >> num;
if(num <= 0)
{
cout << "ERROR!" << endl;
}
else if (num >= 0 && num <= 19)
{
cout << "Your number is: " << ones[Rdight] ;
}
else if (num >=20 && num <=99)
{
Rdight = num % 10;
Ldight = num / 10;
cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight];
}
return 0;
}
答案 0 :(得分:3)
你应该改变这个:
cout << "Your number is: " << tens[Ldight - 2] << ones[num];
要
cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight];
您计算一个您从未使用过的值。并且在ones
以上的行中,num访问索引越界。
答案 1 :(得分:1)
对于您的第一个问题,您的问题就在这一行:
cout << "Your number is: " << tens[Ldight - 2] << ones[num];
您正在使用错误的变量,尽管正确计算了上面一行中的值。我不是在告诉你如何修复它,因为你是一个学习编程,你需要学习如何发现这类问题。
[我个人会将两个虚拟字段添加到“十位”,因此您不必执行-2
- 这是一个很小的代价]。
至于你的第二个问题,你将不得不考虑如何说出来,你可能会想出一些东西......与解决单个数字并没有什么不同,让我们说。如果你需要超过六个左右的线,你就错了。
一旦你解决了数百个问题,只需几行额外的代码就能增加数百万甚至更多的数字,这将是非常微不足道的。
答案 2 :(得分:0)
使用以下行:
cout&lt;&lt; “你的号码是:”&lt;&lt;数十[Ldigit - 2]&lt;&lt;那些[<强> Rdigit-1 强>];
因为你输出为错误,当i / p <= 0时,不需要[0]中的元素“0”,所以删除元素“0”
答案 3 :(得分:-1)
您可以尝试将用户输入拆分为2件。 如果用户输入为:55,则将其拆分为5和5,然后打印
数十[5] +个[5]
这将是更好的解决方案。 您将删除所有可能导致问题的if-s