7-1 币值转换 (20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
1.实验代码:
#include<stdio.h>
int main()
{
int money,i,j;
char figure[10]={'a','b','c','d','e','f','g','h','i','j'};//定义字符,输入a-j
int space[10]={};
scanf("%d",&money);
if(money==0) //判断为0的情况
printf("a");
else
{
for(i=1;money>0;i++)
{
space[i]=money%10; //求各个位数上的数字
money=money/10;
}
i=i-1;
for(j=i;j>0;j--)
{
if(space[j]==0)
{
if(space[j-1]!=0)
printf("a");
}
else
printf("%c",figure[space[j]]); //以字母来输出各个位数上的数字
if(j==5&&(space[8]!=0||space[7]!=0||space[6]!=0||space[5]!=0))//超过万位且不为0
printf("W");
if(space[j]!=0)
{
if(j==2||j==6) //在各个位数上添加单位
printf("S");
if(j==3||j==7)
printf("B");
if(j==4||j==8)
printf("Q");
if(j==9)
printf("Y");
}
}
}
return 0;
}
2.设计思路:
流程图:
首先,将需要的数字每一个位的数都分离出来并且储存至数组中,
然后写一个数组,其中每一个元素与字母位置对应,
然后把对应的数字转化为对应的字母。
由于0在里面的情况比较特殊,所以单独考虑什么时候该打印0。
在实现了所有数字的转化后,开始考虑对应的单位应该在什么时候加入。
通过循环语句一个一个把数组中的字母打出来。
注意事项:
本题在101这个数字的输出值尤其要考究,对于10000的输出,以及再未达到万位的数字输出也是考量的目标,且需要加入对数位的判断
3.本题调试过程碰到问题及解决办法:
问题1:开始忘记考虑money等于0的情况
解决办法:添加 if(money==0)
问题2:在i多加了一次后没有减一
解决办法:添加i=i-1