您的位置:首页 > 其它

1082. Read Number in Chinese (25) PAT

2016-06-03 16:45 274 查看
注意细节,比如大小写,零的处理,以及空格

#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
map<char,string>m;
map<int,string>mm;
int pp=0;
string solve(string str){
string tmp="";
if(str.length()==1&&str[0]=='0'){
return "ling";//测试点之一
}
for(int i=0;i<str.length();i++){
int ll=str.length()-i;
if(str[i]=='0'){
if((i<str.length()-1)&&str[i+1]!='0'){
tmp+=" "+m['0'];
continue;
}
else{
continue;
}
}
if(!pp){
tmp+=m[str[i]];
pp=1;
}
else{
tmp+=" "+m[str[i]];
}
if(ll>1){
tmp+=" "+mm[ll];
}
}
return tmp;
}
int main(){
m['0']="ling",m['1']="yi",m['2']="er",m['3']="san",m['4']="si",m['5']="wu",m['6']="liu",m['7']="qi",m['8']="ba",m['9']="jiu";
mm[2]="Shi",mm[3]="Bai",mm[4]="Qian";
string str;
cin>>str;
string ans="",str1="",str2="";
int flag=0,i,j,k=0;
if(str[0]=='-'){
ans+="Fu";
k=1;
pp=1;
}
if((str.length()==9&&str[0]!='-')||(str.length()==10&&str[0]=='-')){
if(str[0]=='-'){
ans+=" "+m[str[1]]+" "+"Yi";
}
else{
ans+=m[str[1]]+" "+"Yi";
}
if((str.length()==10&&str[0]=='-')){
k=2;
}
pp=1;
}
for(i=str.length()-1,j=0;j<4&&i>=k;j++,i--);
int temp=i;
for(i++;i<str.length();i++){
str1+=str[i];
}
for(j=k;j<=temp;j++){
str2+=str[j];
}
ans+=solve(str2);//转换前四位(若存在)
// cout<<str2<<endl;
if(str2.length()>0){
ans+=" Wan";
}
// cout<<str1<<endl;
ans+=solve(str1);//转换后四位
cout<<ans<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: