7-168 币值转换 (20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
#include<iostream> //①从count开始后缀为0,不发声(但要警惕类似130/0000的,不要忘记补上“万”) //②0只发零不带权值 //③中间连续的0只发一个音 //④不要忘记最小的个位数0 using namespace std; int main (void){ int n; cin>>n; if(n==0){ cout<<'a'; return 0; } int s[9]; for(int i=0;i<9;i++)s[i]=-1;//数组统一赋初值 int flag=1;//标记末尾的0 int count=8; //放入数组 for(int i=8;n;i--){ s[i]=n%10; if(s[i]!=0&&flag==1){count=i;flag=0;}//从后往前第一次出现不是0的位 n=n/10; } int flag0=1;//检测是否有多个0 for(int i=0;i<=count;i++){ if(s[i]==-1)continue; else if(s[i]==0&&i==4&&(s[1]>0||s[2]>0||s[3]>0)){cout<<'W';continue;} //是0的情况,且是万位,而且不是类似100000001的情况,此时不发0只发W switch(s[i]){ case 0:if(flag0)cout<<'a';break; case 1:cout<<'b';break; case 2:cout<<'c';break; case 3:cout<<'d';break; case 4:cout<<'e';break; case 5:cout<<'f';break; case 6:cout<<'g';break; case 7:cout<<'h';break; case 8:cout<<'i';break; case 9:cout<<'j';break; default:break; } if(s[i]!=0)//零处除了万其他时候权值不发音 switch(i){ case 0:cout<<'Y';break; case 1:cout<<'Q';break; case 2:cout<<'B';break; case 3:cout<<'S';break; case 4:cout<<'W';break; case 5:cout<<'Q';break; case 6:cout<<'B';break; case 7:cout<<'S';break; default:break; }else if(s[i]==0)flag0=0;//如果这次是0,那么下次遇到零就不发音 }if(count>0&&count<4)cout<<'W';//最后给因为后缀是0而忽略万的数补上W }