解答代码
#include<iostream> #include<fstream> #include<string> #include<cstring> #include<algorithm> #include<sstream> using namespace std; string table[11]={"ling ","yi ","er ","san ","si ","wu ","liu ","qi ","ba ","jiu "}; string table2[4]={"qian ","bai ","shi "}; int flag=1; string change(string s) { int i,index=0; string result=""; char ss[4]=""; //过滤无效的前导0 for(i=0;i<s.length()&&s[i]=='0';i++); for(;i<s.length();i++) ss[index++]=s[i]; ss[index]='/0'; int length=strlen(ss); //记录后导0 int record=0; for(i=length-1;i>=0;i--) if(ss[i]=='0') record++; else break; if(record>0) flag=0; int k=4-length; //2位含十的有点特殊 if(length < s.length() && length!=0) cout<<"ling "; if(length==2) { if(ss[0]=='1' && ss[1]=='0') return "yi shi "; if(ss[0]=='1' && ss[1]!='0') return "shi "+table[ss[1]-'0']; if(ss[0]!='1' && ss[1]=='0') return table[ss[0]-'0']+"shi "; if(ss[0]!='1' && ss[1]!='0') return table[ss[0]-'0']+"shi "+table[ss[1]-'0']; } for(i=0;i<length-record;i++,k++) { if(ss[i]!='0') { result+=table[ss[i]-'0']+table2[k]; } else if(i!=0 && ss[i]!=ss[i-1]) result+="ling "; } return result; } int main() { string data=""; string s1="",s2=""; while(cin>>data) { int pos=data.find('.'); if(pos!=string::npos) { s1=data.substr(0,pos); s2=data.substr(pos+1); } else { s1=data; } if(s1.length()>8) { string temp1=s1.substr(0,s1.length()-8); s1=s1.substr(s1.length()-8,s1.length()); string result1=change(temp1); if(result1.length()!=0) cout<<result1<<"yi "; } if(s1.length()>4) { string temp2=s1.substr(0,s1.length()-4); s1=s1.substr(s1.length()-4,s1.length()); string result2=change(temp2); if(result2.length()!=0) cout<<result2<<"wan "; } if(s1.length()>0) { string result3=change(s1); if(result3.length()!=0) cout<<result3<<" "; } if(s2.length()==0 || (s2[0]=='0' && s2[1]=='0') ) cout<<" "<<endl; else { if(s2[0]=='0'&&s2[1]!='0') { cout<<table[s2[1]-'0']<<" "<<endl; continue; } if(s2[0]!='0'&&s2[1]=='0') { cout<<table[s2[0]-'0']<<" "<<endl; continue; } if(s2[0]!='0'&&s2[1]!='0') { cout<<table[s2[0]-'0']<<" "<<table[s2[1]-'0']<<" "<<endl; } } } return 0; }
新闻热点
疑难解答