输入一个整数(位数不超过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 <string.h>
#include <stdlib.h>
int main()
{
int n, digit = 0, a[9], i = 1, j = 0, k = 0, zero = 0;
char s[] = { ' ','S','B','Q','W','S','B','Q','Y' };
char ch[100] = { '\0' };
scanf("%d", &n);
if (n <= 9)//最小个位数
{
printf("%c", n + 97);
exit(0);
}
a[0] = n % 10;
while (n / 10 > 0)//求位数,存数字
{
n /= 10;
a[i] = n % 10;
digit++;
i++;
}
for (int i = 0; i <= digit; i++)//计算末尾0的个数
{
if (a[i] == 0)
zero++;
else
break;
}
for (int i = 0; i <= digit; i++)
{
if (a[i] == 0)
{
ch[k++] = 'a';
j++;
}
else
{
ch[k++] = s[j++];
ch[k++] = a[i] + 97;
}
}
char c[100] = { '\0' };
int x = 0;
int flag1 = 0, flag2 = 0;
for (int i = strlen(ch) - 1; i >= zero; i--)
{
if (ch[i] == 'a')
{
flag1 = 1;
flag2++;
}
else
flag1 = 0;
if (!flag1)
{
if (flag2 >= 3)
{
c[x-1] = 'W';
c[x++] = 'a';
}
flag2 = 0;
}
if (flag2 > 1)
ch[i] = ' ';
if (ch[i] != ' ')
c[x++] = ch[i];
}
printf("%s", c);
return 0;
}