输入一个整数(位数不超过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 <math.h>
char shuzi(int i)
{
char ch;
if(i==0)
ch='a';
if(i==1)
ch='b';
if(i==2)
ch='c';
if(i==3)
ch='d';
if(i==4)
ch='e';
if(i==5)
ch='f';
if(i==6)
ch='g';
if(i==7)
ch='h';
if(i==8)
ch='i';
if(i==9)
ch='j';
return ch;
}
char danwei(int i)
{
char ch;
if(i==2)
ch='S';
if(i==3)
ch='B';
if(i==4)
ch='Q';
if(i==5)
ch='W';
if(i==6)
ch='S';
if(i==7)
ch='B';
if(i==8)
ch='Q';
if(i==9)
ch='Y';
return ch;
}
int main()
{
int x;
scanf("%d", &x);
if(x==0)
{
printf("a");
}
else
{
int number=x;
int l=0;
while(x>0)
{
x/=10;
l++;
}
int m[l+1];
int i;
for(i=1;i<=l;i++)
{
double a=pow(10,i);
double b=pow(10,i-1);
int aa=(int)a,bb=(int)b;
m[i]=(number%aa)/bb;
}
char c[2*l+1];
for(i=l;i>0;i--)
{
if(m[i]!=0)
{
c[2*i]=shuzi(m[i]);
c[2*i-1]=danwei(i);
}
}
for(i=l;i>0;i--)
{
if(m[i]==0)
{
if(m[i-1]==0&&(i-1)>0)
c[2*i]='z';
else if(m[i-1]==0&&(i-1)==0)
c[2*i]='z';
else
{
if(c[2*i]=='z')
continue;
else
{
if(l>8&&m[8]==0&&m[7]==0&&m[6]==0&&m[5]==0)
{
printf("a");
}
else
{
if(i==5)
printf("W");
else
printf("a");
}
}
}
}
else
{
if(c[2*i]=='z')
continue;
else
{
if(i==1)
printf("%c",c[2*i]);
else
printf("%c%c",c[2*i],c[2*i-1]);
}
}
}
}
printf("\n");
}
参考博客 https://blog.csdn.net/qq_37729102/article/details/80637016
这篇博客中思路讲解比较清晰,但是博主用c++实现,我结合思路修改程序,仍然存在问题,决定暂时放下,以后有时间再解决这个问题。