输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
昨天晚上在睡觉的时候有了灵感,哈哈 那个中间零的想法就出来了
我这道题写的比较麻烦 中间有零情况比较难
给你们说一下思路
我就考虑特殊情况
首先是后面是零的情况 我用的while循环找出后面有多少个零(万里面找一个,个位那里找一个),万的话是我睡觉的时候有的思路(昨天晚上写不出来,睡觉忽然就脑子转起来了,哈哈),就找出后就不用管它了(这是我考虑的情况一这个比较难)
第二个考虑的情况就是个位或者万位不是零,其他位含有多个连续零(就一个if语句就可以搞定)
一个细节 第二个for循环哪里,开始的时候不是从千位开始的(这个的话课读出一个零)这个是我碰巧写出来的,
其实也可以利用if语句写,然后从千位开始。既然对了就不该了。
补上昨天没写出来的代码,上代码
#include<iostream> #include<algorithm> #include<string.h> #include<math.h> using namespace std; int main() { char s[10]; cin>>s; int n=strlen(s);//计算多少位 char shu[11]={'a','b','c','d','e','f','g','h','i','j'}; int j=1; //6001 if(s[n-1]=='0'&&n==1) { cout<<shu[0]; return 0; } while(s[n-j]=='0')//最后面多少个零 { j++; } int k=5; while(s[n-k]=='0')//万位多少连续的零 { k++; } int m[n];//100100001 这是我实验的数 for(int i=0;i<n-k+1;i++) { m[i]=s[i]-'0'; if(m[i-1]==0&&m[i]==0)//第二种情况考虑 { } else { cout<<shu[m[i]]; if((n-i)==9) { cout<<"Y"; } else if(((n-i)==5)&&m[i]!=0) { cout<<"W"; } else if(((n-i)==4||(n-i)==8)&&m[i]!=0) { cout<<"Q"; } else if(((n-i)==3||(n-i)==7)&&m[i]!=0) { cout<<"B"; } else if(((n-i)==2||(n-i)==6)&&m[i]!=0) { cout<<"S"; } } }//100100100 if(s[n-5]=='0') cout<<"W";//特殊情况考虑,上面代码没法输出W for(int i=n-k+1;i<n-j+1;i++)//下面循环内容跟上面一样 主要是这个for循环里面 { m[i]=s[i]-'0'; if(m[i-1]==0&&m[i]==0) { } else { cout<<shu[m[i]]; if((n-i)==9) { cout<<"Y"; } else if(((n-i)==5)&&m[i]!=0) { cout<<"W"; } else if(((n-i)==4||(n-i)==8)&&m[i]!=0) { cout<<"Q"; } else if(((n-i)==3||(n-i)==7)&&m[i]!=0) { cout<<"B"; } else if(((n-i)==2||(n-i)==6)&&m[i]!=0) { cout<<"S"; } } } }