纯字符串实现

//
// Created by Administrator on 2024/4/11.
//
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

//字典
vector<string> dict1{"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
vector<string> dict2{"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
                     "nineteen"};
vector<string> dict3{"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};

//将反转后的字符串数字转换为英文
string process1(string &num_str) {
    string result;
    //统一为三位数
    if (num_str.size() == 1)
        num_str += "00";
    else if (num_str.size() == 2)
        num_str += "0";

    if (num_str[1] != '1') {    //十位数不为1可直接组合处理
        result += dict1[num_str[0] - '0'];
        if (num_str[1] != '0') {
            if (!result.empty())
                result = dict3[num_str[1] - '0'] + " " + result;
            else    //个位数为0不添加空格
                result = dict3[num_str[1] - '0'];
        }
    } else  //十位数为1需要单独处理
        result += dict2[num_str[0] - '0'];

    if (num_str[2] != '0') {
        if (!result.empty())
            result = dict1[num_str[2] - '0'] + " hundred and " + result;
        else
            result = dict1[num_str[2] - '0'] + " hundred";
    }

    return result;
}

int main() {
    string in;
    cin >> in;
    vector<string> num;
    reverse(in.begin(), in.end());  //反转以便划分
    for (int i = 0; i < in.size(); i += 3) {    //每三位一组划分
        string sub_str = in.substr(i, 3);
        sub_str = process1(sub_str);
        num.push_back(sub_str);
    }

    string result;
    for (int i = 0; i < num.size(); ++i) {
        if (i == 3 && !num[i].empty())
            result = num[i] + " billion " + result;
        else if (i == 2 && !num[i].empty())
            result = num[i] + " million " + result;
        else if (i == 1 && !num[i].empty())
            result = num[i] + " thousand " + result;
        else
            result += num[i];
    }

    cout << result;

    return 0;
}