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