#include<bits/stdc++.h>
/*
ID : A1082
TYPE : String
TIME : 2020.3.2
DURANCE :
NOTICE :
边界条件要考虑挺多,代码较为dirty
Number == 0时,发零音
Number 万~千万位 == 0 时,"Wan"不发音
*/
using namespace std;
string Number;
string digit[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
string degree[6] = {"_", "Shi", "Bai", "Qian", "Wan", "Yi"};
int main(void) {
vector<string> Result;
cin >> Number;
reverse(Number.begin(), Number.end());
bool flag = false; // 控制位,如果出现了非零数那本四位下个零发音,否则不发音
for (int i = 0; i < Number.size(); ++i) {
if (Number[i] == '-') {
Result.push_back("Fu");
}
else if (i < 4) {
if (Number[i] != '0') {
flag = true; // 本四位下个零发音
if (i > 0) Result.push_back(degree[i]);
Result.push_back(digit[Number[i] - '0']);
}
if (flag && Number[i] == '0') {
Result.push_back(digit[0]);
flag = false; // 本四位下个零又不发音
}
} else if (i == 4){
flag = false; // 下四位
Result.push_back(degree[4]);
if (Number[i] != '0') {
flag = true; // 下个零发音
Result.push_back(digit[Number[i] - '0']);
}
}
else if (i > 4 && i < 8){
if (Number[i] != '0') {
flag = true; // 下个零发音
Result.push_back(degree[i-4]);
Result.push_back(digit[Number[i] - '0']);
}
if (flag && Number[i] == '0') {
Result.push_back(digit[0]);
flag = false; // 本四位下个零不发音
}
} else if (i == 8) {
if (Number[7] == '0' &&Number[6] == '0' &&Number[5] == '0' &&Number[4] == '0')
Result.pop_back(); // 连续四个0则将“Wan"删除
Result.push_back(degree[5]);
if (Number[i] != '0') Result.push_back(digit[Number[i] - '0']);
}
}
if (Number.size() == 1 && Number[0] == '0') Result.push_back(digit[0]);
for (int i = Result.size()-1; i >= 0 ; --i) cout << Result[i] << ((i==0)?"\n":" ");
return 0;
}
原文:https://www.cnblogs.com/XyLee/p/12393419.html