本题难度较大,要用到递归的思想
#include <iostream> #include <string> #include <vector> using namespace std; const string ones[] = {"zero","one","two","three","four","five","six","seven","eight","nine"}; const string tens[] = {"ten","elevent","twelve","thirdteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; const string twenties[] = {"zero","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"}; const int ihundreds[] = {(int)1e2, (int)1e3, (int)1e6, (int)1e9, (int)1e12}; const string hundreds[] = {"hundred","thousand","million","billion"}; string transfer_Eng(long long n) { // 如果数字是个位数 if (0 <= n && n <= 9) return ones[n]; // 如果数字是十位数(10-19) if (10 <= n && n < 20) return tens[n % 10]; // 如果数字是十位数(20-99) if (20 <= n && n < 1e2) { int one = n % 10; int ten = n / 10; string ten_s = twenties[ten]; string one_s; if (one == 0) { return ten_s; } else { one_s = " " + ones[one]; return ten_s + one_s; } } // 如果数字为三位数或者大于三位数 for (int i = 0; i < 4; i++) { // 递归实现 if (n < ihundreds[i + 1]) { int inter = n / ihundreds[i]; int rem = n % ihundreds[i]; return transfer_Eng(inter) + " " + hundreds[i] + (rem ? (i ? " " : " and ") + transfer_Eng(rem) : " "); } } return ""; } int main(){ long long n; cin >> n; string res = transfer_Eng(n); cout << res << endl; }