1082. Read Number in Chinese (25)

来源:互联网 发布:认知无线电网络 编辑:程序博客网 时间:2024/05/16 08:32

说实话,这道题特殊情况有点多,牛客网的测试点比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;}               
0 0
原创粉丝点击