#include <iostream>
using namespace std;
#include <string>
#include <stack>
string num2str(char a) {
string result;
switch (a) {
case '1':
result = "one";
break;
case '2':
result = "two";
break;
case '3':
result = "three";
break;
case '4':
result = "four";
break;
case '5':
result = "five";
break;
case '6':
result = "six";
break;
case '7':
result = "seven";
break;
case '8':
result = "eight";
break;
case '9':
result = "nine";
break;
}
return result;
}
string num2str2(char a) {
string result;
switch (a) {
case '0':
result = "ten";
break;
case '1':
result = "eleven";
break;
case '2':
result = "twelve";
break;
case '3':
result = "thirteen";
break;
case '4':
result = "fourteen";
break;
case '5':
result = "fifteen";
break;
case '6':
result = "sixteen";
break;
case '7':
result = "seventeen";
break;
case '8':
result = "eighteen";
break;
case '9':
result = "nineteen";
break;
}
return result;
}
string num2str3(char a) {
string result;
switch (a) {
case '2':
result = "twenty";
break;
case '3':
result = "thirty";
break;
case '4':
result = "forty";
break;
case '5':
result = "fifty";
break;
case '6':
result = "sixty";
break;
case '7':
result = "seventy";
break;
case '8':
result = "eighty";
break;
case '9':
result = "ninety";
break;
}
return result;
}
string str2cout(char a, char b) {
string result;
if (a == ' ') {
result = num2str(b);
} else if (b == '0' && a != '1' && a != '0') {
result = num2str3(a);
} else if (a == '0' && b == '0') {
result = "ak";
} else if(a == '0' && b !='0'){
result = num2str(b);
}else {
if (a == '1') {
result = num2str2(b);
} else {
result = num2str3(a) + " " + num2str(b);
}
}
return result;
}
int main() {
string num;
stack<string> out;
getline(cin, num);
int cnt = 0;
for (int i = num.size() - 1; i >= 0 ; i--, cnt++) {
if (cnt == 0 || cnt == 3 || cnt == 6) {
if (cnt == 3) {
out.push("thousand");
} else if (cnt == 6) {
out.push("million");
}
if (num.size() - cnt >= 2) {
out.push(str2cout(num[i - 1], num[i]));
} else {
out.push(str2cout(' ', num[i]));
}
} else if (cnt == 2 || cnt == 5) {
if (out.top() != "ak") {
if (num[i] != '0') {
out.push("hundred and");
out.push(str2cout(' ', num[i]));
}
} else {
if (num[i] != '0') {
out.push("hundred");
out.push(str2cout(' ', num[i]));
}
}
}
}
while (!out.empty()) {
if (out.top() != "ak") {
cout << out.top() << " ";
}
out.pop();
}
}
全靠自己的逻辑写的,有点小乱。
主要是2位2位检查,再加上million等单位

京公网安备 11010502036488号