1963020
one million nine hundred and sixty three thousand and twenty
这种情况,到底是and twenty 还是 twenty,测试用例没有覆盖
1538088
one million five hundred and thirty eight thousand eighty eight
这是测试用例覆盖到大于 20 但百位为0的情况,是没有and的

#include <bits/stdc++.h>
using namespace std;
string s[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", 
               "eleven", "twelve", "thirten", "fourten", "fifteen", "sixten", "seventen", "eighten", "nineten",
               "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", 
               "hundred", "thousand", "million", "billion"};
string process(long &n) {
    string t;
    long x = n % 100;
    n /= 100;
    if (x <= 20) t = (n ? "and " : "") + s[x]; // (n % 10 ? "and " : "") + s[x]; 小于20百位为0没有and
    else {
        t = (n % 10 ? "and " : "") + s[x / 10 + 18] + (x % 10 == 0 ? "" : " " + s[x % 10]);
    }
    if (n && n % 10 != 0) t = s[n % 10] + " " + "hundred " + t;
    n /= 10;
    return move(t);
}
int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    long n;
    while (cin >> n) {
        string t = process(n);
        int i = 29;
        while (n) {
            t = process(n) + " " + s[i++] + " " + t;
        }
        cout << t << endl;
    }
    return 0;
}