题解 | #学英语#
学英语
http://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
首先处理小于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; }