首先处理小于1000的情况,对于大于1000的数字,递归调用处理每一级别。
#include <iostream>
#include <sstream>
using namespace std;
string tens[] = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
string ones[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"};
string others[] = {"", "thousand", "million", "billion"};
int scopes[] = {1, 1000, 1000000, 1000000000};
string convert(int num) {
int lower;
int hundred;
stringstream ss;
// 处理小于1000的情况
if (num <= 19) return ones[num];
if (num >= 20 && num <= 99) return tens[num / 10] + ((num % 10 > 0)? " " + ones[num % 10] : "");
if (num >= 100 && num <= 999) {
ss << ones[num / 100] << " hundred";
if (num % 100 > 0) {
ss << " and " << convert(num % 100);
}
return ss.str();
}
// 处理大于1000的情况
for(int i=3; i>= 0; i--) {
if (num > scopes[i]) {
ss << convert(num / scopes[i]) << " " << others[i];
num %= scopes[i];
// 后续仍然有数字
if (num > 0) {
ss << ' ';
}
}
}
return ss.str();
}
int main() {
int num;
while(cin >> num) {
getchar();
cout << convert(num) << endl;
}
return 0;
}
京公网安备 11010502036488号