7-23 币值转换(20 分)
输入一个整数(位数不超过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>
#include <stdlib.h>
int main()
{
int i, j, n;
int num = 0;
char a[10];
char b[10] = {'Y','Q','B','S','W','Q','B','S'};
scanf("%s", a);
for(i = 8; i >= 0; i--)
{
if(a[i] >= '0' && a[i] <= '9')
{
n = i;
break;
}
} // n是包含的总个数
for(i = 0; i <= n; i++)
{
j = 8 + i - n;
if(a[i] >= '1' && a[i] <= '9')
{
if(i != n) //不是最后一位
printf("%c%c", a[i] + 49, b[j]);
else
printf("%c",a[i]+49);
}
if(a[i] == '0')
{
if(a[i+1] > '0' && a[i + 1] <= '9' && j != 4)
printf("%c", a[i] + 49);
if(j == 4)
{
int k = 0;
if(n == 8)
k = 1;
else
k = 0;
for(; k < i; k++)
num = num * 10 + (a[k] - '0');
if(num != 0)
printf("%c", b[j]);
}
}
}
if(n == 0 && a[0] == '0')
{
printf("a");
}
return 0;
}