PAT A1082 Read Number in Chinese
思路:注意以四个为一节,共有个节,万节,亿节。注意除了最后个位,每一节的末尾输出万或者亿,此外要注意如何处理中间的零。属于比较绕的模拟题。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<string> num = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
vector<string> wei = {"Shi", "Bai", "Qian", "Wan", "Yi"};
int main() {
string s;
cin >> s;
int left = 0, right = s.size() - 1;
if(s[0] == '-') {
cout << "Fu";
left++;
}
while(left + 4 <= right) right -= 4;
while(left < s.size()) {
bool flag = false;
bool isPrint = false;
while(left <= right) {
if(left > 0 && s[left] == '0') {
flag = true;
} else {
if(flag) {
cout << " ling";
flag = false;
}
if(left > 0) cout << " ";
cout << num[s[left] - '0'];
// 该节中至少输出一位才可能输出万或亿
isPrint = true;
// 某节中除了个位,都要输出十百千
if(left != right) cout << " " << wei[right - left - 1];
}
left++;
}
// 只要不是个位,就输出万或者亿
if(isPrint && right != s.size() - 1)
cout << " " << wei[(s.size() - 1 - right) / 4 + 2];
right += 4;
}
return 0;
}