有两件事:如果您只对数组进行索引,则可以节省大量打字时间。您可以通过意识到问题在数百个案例后重复出现来更普遍地解决问题。数千、数百万、数十亿、万亿和万亿都遵循完全相同的模式,因此可以递归地完成。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string digitName(int digit);
string teenName(int number);
string tensName(int number);
string intName(int number);
vector<string> ones {"","one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
vector<string> teens {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen","sixteen", "seventeen", "eighteen", "nineteen"};
vector<string> tens {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
string nameForNumber (long number) {
if (number < 10) {
return ones[number];
} else if (number < 20) {
return teens [number - 10];
} else if (number < 100) {
return tens[number / 10] + ((number % 10 != 0) ? " " + nameForNumber(number % 10) : "");
} else if (number < 1000) {
return nameForNumber(number / 100) + " hundred" + ((number % 100 != 0) ? " " + nameForNumber(number % 100) : "");
} else if (number < 1000000) {
return nameForNumber(number / 1000) + " thousand" + ((number % 1000 != 0) ? " " + nameForNumber(number % 1000) : "");
} else if (number < 1000000000) {
return nameForNumber(number / 1000000) + " million" + ((number % 1000000 != 0) ? " " + nameForNumber(number % 1000000) : "");
} else if (number < 1000000000000) {
return nameForNumber(number / 1000000000) + " billion" + ((number % 1000000000 != 0) ? " " + nameForNumber(number % 1000000000) : "");
}
return "error";
}
int main()
{
long input;
do
{
cout << "Please enter a positive integer: ";
cin >> input;
cout << "\n" << nameForNumber(input) << endl;
cout << "\n\n" << endl;
}while (input > 0);
return 0;
}