题解 | #学英语#
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
#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等单位
华为机试刷题记录 文章被收录于专栏
记录一下手打代码的解题思路方便复习