本题难度较大,要用到递归的思想
#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;
}