首页 > 其他 > 详细

PAT (Advanced Level) 1082 Read Number in Chinese

时间:2020-01-21 11:43:36      阅读:82      评论:0      收藏:0      [点我收藏+]

题解

      模拟。先将原始字符串处理 [ 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);
        }
    }
}

PAT (Advanced Level) 1082 Read Number in Chinese

原文:https://www.cnblogs.com/VividBinGo/p/12220899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!