币值转换 (20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
提供一种简单,容易理解的方法。已经AC,程序理论上没有任何的bug,如果发现麻烦评论区留言。
#include<stdio.h>
int main()
{
int x,a[9]={0},x1,pow=1,i=0;
int digits=0;
int zero=0;
scanf("%d",&x);
x1=x;
if(x==0)
{
printf("a");
return 0;
}
while(x1>=10) //计算x的位数
{
x1/=10;
pow*=10;
}
while(pow>0) //将x各数字按顺序读入数组中
{
a[i]=x/pow;
x=x%pow;
pow/=10;
i++;
}
i-=1;
while(i>=0)
{
if(a[digits]==0) //数字为0时不输出
{
zero++;
}
else
{
if(zero!=0) //上一位(多位)为0且该位不为0时,先输出一个a
{
printf("a");
zero=0;
}
switch(a[digits])
{
case 1:printf("b"); break;
case 2:printf("c"); break;
case 3:printf("d"); break;
case 4:printf("e"); break;
case 5:printf("f"); break;
case 6:printf("g"); break;
case 7:printf("h"); break;
case 8:printf("i"); break;
case 9:printf("j"); break;
}
switch(i) //digits数在第i位
{
case 1:case 5:printf("S");break;
case 2:case 6:printf("B");break;
case 3:case 7:printf("Q");break;
case 8:printf("Y");break;
}
}
if(i==4) //万位无论是什么数字都必须输出
{
printf("W");
zero=0;
}
i--;
digits++;
}
return 0;
}