输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
问题分析
这道题如果正向输出的话,遇到0是不知道该怎么处理的你必须判断接下来的数字,而这样太不方便了,不如让我们逆向输出,将字符串先判断最后一个数的值再往前判断,这样就很好的解决了零的输出问题,就是遇到的第一个0只输出0如果在一个0接下来的数字还是0就不用输出这一个0,然后还有万位的解决,如果是带有亿位的话只有当千万位,或百万位,或十万位,或万位至少有一个不为0才用输出0,这样就解决了万位的输出问题,还有个位的输出问题,如果一开始的数字就是0这样的程序会将0输出,但是程序不应将最末尾的0输出,所以在此之前先将末尾0除去即可,按照上述操作后有当这个数为0时处理后的字符串为空串,所以在输出时要判断输入的数是否为0;
代码实现
#include<stdio.h>
char jiahouzhui(int wei){
switch(wei){
case 9:
return 'Y';
case 8:
return 'Q';
case 7:
return 'B';
case 6:
return 'S';
case 5:
return 'W';
case 4:
return 'Q';
case 3:
return 'B';
case 2:
return 'S';
case 1:
return ' ';
}
}
#include<string.h>
int main(){
char s[100],m[9][2],x[100];
gets(s);
int length=strlen(s);
for(int i=0;i<length;i++){
m[i][0]=s[i]-'0'+'a';
m[i][1]=jiahouzhui(length-i);
}
int i;
for(i=length-1;m[i][0]=='a';i--);
int j=0;
int flag=1;
for(;i>=0;i--){
if(m[i][0]!='a'){
if(m[i][1]!=' '){
x[j]=m[i][1];
j++;
}
x[j]=m[i][0];
j++;
flag=1;
}else{
if(flag!=0){
x[j]='a';
j++;
flag=0;
}
if(m[i][1]=='W'&&length<=8){
x[j]='W';
j++;
}
}
}
if(length==1&&m[0][0]=='a'){
printf("a");
}else{
for(i=j-1;i>=0;i--){
printf("%c",x[i]);
}
}
return 0;
}
该代码实现了一个将不超过9位的人民币数值(以元为单位)转换为大写中文格式的功能。程序通过逆向处理字符串,解决了零的输出问题,并确保符合中文习惯。在处理过程中,对万位和个位的特殊情况进行处理,确保了输出的准确性。例如,输入813227345会输出'iYbQdBcScWhQdBeSf',而输入6900则输出'gQjB'。
7203

被折叠的 条评论
为什么被折叠?



