输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
分析:
1.题目条件:
基本输出顺序:数字在前,单位在后,个位无单位
有一些特殊的情况值得注意:
1.万位为0,没有数字,但必有单位,如100000,读作壹拾万,即bSW
2.千位为0,没有数字也没有单位,如10100,读作壹万壹佰,即bWbB
3.当前位为0,前一位也为0,没有数字和单位,如100,读作壹佰,即Bb
4.当前位为0,前一位非0,有数字,无单位,如101,读作壹佰零壹,即bBab
话不多说,代码附上,测试通过。
#include <stdio.h>
int main()
{
char num[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
char NUM[3] = {
'Q',
'B',
'S',
};
char out[17] = "";
int funcchange(int i, char *str)
{
int n[4];
n[0] = i / 1000;
n[1] = i % 1000 / 100;
n[2] = i % 100 / 10;
n[3] = i % 10;
int j = 0, k = 4;
for (int k = 0; k < 4; k++)
{
if (n[k] > 0)
{
str[j] = num[n[k]];
j++;
if (k < 3)
{
str[j] = NUM[k];
j++;
}
}
else
{
if ((j == 0) || ((j > 0) && (str[j - 1] != 'a')))
{
str[j] = 'a';
j++;
}
}
}
if (str[j - 1] == 'a')
j -= 1;
return j;
}
long long n;
scanf("%lld", &n);
if (n == 0)
{
printf("a");
return 0;
}
int a = n / 100000000;
int b = n % 100000000 / 10000;
int c = n % 10000;
int m = 0;
if (a > 0)
{
out[m] = num[a];
m++;
out[m] = 'Y';
m++;
}
if (b > 0)
{
m += funcchange(b, out + m);
out[m] = 'W';
m++;
}
if (c > 0)
m += funcchange(c, out + m);
if (out[m - 1] == 'a')
out[m - 1] = '\0';
else
out[m] = '\0';
if (out[0] == 'a')
printf("%s", out + 1);
else
{
printf("%s", out);
}
return 0;
}