纯字符串实现
//
// 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;
}

京公网安备 11010502036488号