注意0的情况
AC代码:
#include <string> #include <iostream> #include <vector> using namespace std; string number[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; string unit[] = {"","Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi"}; int main(){ string ret; vector<string> trans; cin >> ret; if(ret == "0"){ cout << "ling" << endl; return 0; } if(ret[0] == '-'){ cout << "Fu "; ret = ret.substr(1); } for(int i = ret.size() - 1;i >= 0;i--){ if(ret[i] != '0'){ if(unit[ret.size() - 1 - i] != "") trans.push_back(unit[ret.size() - 1 - i]); trans.push_back(number[ret[i] - '0']); } else{ int s(ret.size() - 1 - i); while(ret[i] == '0') i--; if(s == 4){ if(ret.size() - 1 - i != 8){ trans.push_back(unit[s]); trans.push_back(unit[ret.size() - 1 - i]); trans.push_back(number[ret[i] - '0']); } else{ trans.push_back("ling"); trans.push_back("Yi");; trans.push_back(number[ret[i] - '0']); } } else if(s < 4){ if(s != 0) trans.push_back("ling"); if(ret.size() - 1 - i > 4 && ret.size() - 1 - i != 8){ trans.push_back("Wan"); trans.push_back(unit[ret.size() - 1 - i]); trans.push_back(number[ret[i] - '0']); } else{ trans.push_back(unit[ret.size() - 1 - i]); trans.push_back(number[ret[i] - '0']); } } else{ if(ret.size() - 1 - i == 8){ trans.push_back("ling"); trans.push_back("Yi"); trans.push_back(number[ret[i] - '0']); } else{ trans.push_back(unit[ret.size() - 1 - i]); trans.push_back(number[ret[i] - '0']); } } } } for(int i = trans.size() - 1;i >= 0;i--){ if(i == trans.size() - 1) cout << trans[i]; else cout << ' ' << trans[i]; } cout << endl; return 0; }