PAT (Advanced Level) 1082 Read Number in Chinese

题解

      模拟。先将原始字符串处理 [ op(string &s) ] 一下就好。

代码

#include<bits/stdc++.h>
using namespace std;
char ch[15][5]={{"ling"},{"yi"},{"er"},{"san"},{"si"},{"wu"},{"liu"},{"qi"},{"ba"},{"jiu"},{"shii"}};
char dw[5][5]={{"Shi"},{"Bai"},{"Qian"},{"Wan"},{"Yi"}};
void op(string &s);
int main()
{
    string s;
    int i,len,flag=0;
    cin>>s;
    if(s[0]=='-') 
    {
        printf("Fu");
        s=s.substr(1,string::npos);
        flag=1;
    }
    op(s);
    for(i=0,len=s.size();i<s.size();i++)
    {
        if(s[i]=='#') ;
        else if(s[i]=='0') printf("%s%s",flag==1?" ":"",ch[0]),flag=1;
        else
        {
            printf("%s%s",flag==1?" ":"",ch[s[i]-'0']),flag=1;
            if((len-i==2)||(len-i==6)) printf("%s%s",flag==1?" ":"",dw[0]),flag=1;
            else if((len-i==3)||(len-i==7)) printf("%s%s",flag==1?" ":"",dw[1]),flag=1;
            else if((len-i==4)||(len-i==8)) printf("%s%s",flag==1?" ":"",dw[2]),flag=1;
        }
        if(len-i==5) printf("%s%s",flag==1?" ":"",dw[3]),flag=1;
        else if(len-i==9) printf("%s%s",flag==1?" ":"",dw[4]),flag=1;
    }
    system("pause");
    return 0;
}
void op(string &s)
{
    int i,len,index;
    string str="0";
    len=s.size()-1;
    while(len)
    {
        if(s[len]=='0') len--;
        else break;
    }
    s.replace(len+1,string::npos,s.size()-len-1,'#');
    for(i=2;i<=9;i++)
    {
        str+="0";
        while(s.find(str)!=s.npos)
        {
            index=s.find(str);
            s.replace(s.find(str),i,i-1,'#');
            s.insert(index+1,1,'0');
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/VividBinGo/p/12220899.html