题目:
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
代码:
#include<stdio.h>
int main(){
char a[10]; //数组a保存a~j
int b[9]={1}; //数组b保存待求9位数
for(int i=0;i<10;i++)
a[i]=(char)(97+i); //数字强制转换字母
int n,k=0,t=0; //代求数:n 数字长度:k 计数器:t
scanf("%d",&n);
if(n==0){ //n=0情况!!!
printf("a");
return 0;
}
for(int j=0;j<9&&n>0;j++){ //将n各位数逆序存在b数组
b[j]=n%10;
k++; //记录n长度;
n=n/10;
}
for(n=k-1;n>=0;n--){ //由大到小输出b数组
if(b[n]==0){
t++; //如果遇到0,t+1
}
else if(t>0&&b[n]>0){ //如果t>0即该数前面有0未打印,且该数不为0
printf("a"); //打印一个0,然后再打印该数
printf("%c",a[b[n]]);
t=0; //一次0状况完成,计时器t置0!!!
}
else{ //该数不为0,直接打印
printf("%c",a[b[n]]);
}
//打印单位
if(b[n]>0){
switch (n){
case 8:printf("Y");break;
case 7:printf("Q");break;
case 6:printf("B");break;
case 5:printf("S");break;
case 4:printf("W");break;
case 3:printf("Q");break;
case 2:printf("B");break;
case 1:printf("S");break;
default:break;
}
}
if(b[4]==0&&n==5&&t<3){ //万是特殊位置,需要特别打印!!!
printf("W");
}
}
return 0;
}
今天废了一个上午 做出了这道题。不断修改终于全部正确。
由大到小,先输出数字,再输出单位。
两点需要注意:
1.数字会遇到连续或非连续的0,需要注意是否打印及单位问题。
如 100,101
2.单位万,长度大于4一般情况都需要打印,但QW、BW、SW,W为0时万不能打印。
如 100,000,001