说实话,这道题特殊情况有点多,牛客网的测试点比PAT要严的多
#include<iostream>#include<string>#include<cctype>using namespace std;string s[6] = {"Fu","Yi","Shi","Bai","Qian","Wan"};string digit[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };string chuli(string str)//给一个小于5位的字符串,输出中文形式{ string x; int t = str.size()-1; while (str[t] == '0') if(--t==-1) return digit[0]; while (t >= 0) { if (str[t] == '0' && str[t + 1] == '0') { t--;continue; } if (t == str.size()-1||str[t]=='0') x = digit[str[t] - '0']+" "+x; else x = digit[str[t] - '0'] +" "+ s[str.size()-t] + " " + x; t--; } if (x.back() == ' ')x.pop_back(); return x;}int main(){ string resault; string all; cin >> all; if (all[0] == '-') { resault = s[0] + " ";all.erase(0, 1); }//负号先处理好 if (all.size() < 5) resault += chuli(all);//小于5位的情况 else if (all.size() < 9) {//5-8位的情况 resault += chuli(string(all, 0, all.size() - 4)) + " " + s[5];//xxx万 if (string(all, all.size() - 4, 4) != "0000")resault += " " + chuli(string(all, all.size() - 4, 4));//当万以内不为0时 } else { resault += digit[all[0] - '0'] + " " + s[1];//xxx亿 if (string(all, 1, 4) != "0000") resault += " " + chuli(string(all, 1, 4)) + " " + s[5];//xxx亿xxx万 else if(all[5]!='0') resault += " " + digit[0];//xxx亿零xxx if (string(all, 5, 4) != "0000") resault += " " + chuli(string(all, 5, 4)); } cout << resault << endl;}新闻热点
疑难解答