题目
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
链接
https://pintia.cn/problem-sets/14/problems/803https://pintia.cn/problem-sets/14/problems/803
输入格式
输入在一行中给出一个不超过9位的非负整数。
输出格式
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1
813227345
输出样例1
iYbQdBcScWhQdBeSf
输入样例2
6900
输出样例2:
gQjB
解题思路
按题目来讲,其实读出就是差不多让我们读作这些数字。所以我们可以创一个函数。
//创建函数
int jiance(int a)//数字转换
{
switch(a)
{
case(0):printf("a");break;
case(1):printf("b");break;
case(2):printf("c");break;
case(3):printf("d");break;
case(4):printf("e");break;
case(5):printf("f");break;
case(6):printf("g");break;
case(7):printf("h");break;
case(8):printf("i");break;
case(9):printf("j");break;
}
}
//创建函数
int weisu(int a)//位数转换
{
switch(a)
{
case(0):break;
case(9):printf("Y");break;
case(8):printf("Q");break;
case(7):printf("B");break;
case(6):printf("S");break;
case(5):printf("W");break;
case(4):printf("Q");break;
case(3):printf("B");break;
case(2):printf("S");break;
}
}
然后我们需要一个数组存入这些数。
int rmb,a=0,b=0,i=9,j=0,k=10,l=0,f=0,d=0;
int sz[10]={0,0,0,0,0,0,0,0,0,0};//数组
scanf("%d",&rmb);
while(rmb>0)//存入数组
{
if(rmb<10)//是否为一位数
{
a=rmb;
sz[i]=a;
break;
}
else
{
a=rmb%10;//取最后一位
rmb/=10;//再把最后一位去掉
sz[i]=a;//保存到数组
i--;
}
}
if(rmb==0)
{
printf("a");//特殊情况
return 0;
}
因为我们用的是数组。 所以前头可能会有零。所以我们可以把前面的零给去掉。这样打印的时候就不会错误。然后后面的零是要的,后面的零我们也要知道有多少个,需要一个变量计数,方便打印。
最后我们用函数打印。
//打印
for(i=9;i>0;i--) //
{ //
if(sz[i]!=0) //
break; //数组后头去0
else //
{
sz[i]=-3;//
//k--;
}
}
for(i=0;i<10;i++)//
{ //
if(sz[i]!=0){//
j=1; //
}else //
if(j!=1) //数组前头去0
{ //
j=0; //
sz[i]=-1;
k--; //k==位数
} //
}
for(i=0;i<10;i++)
{
if(sz[i]==0&&f==0)
{
f++;
}
else if(sz[i]==0)
{
sz[i]=-2;//数中间零
d++;
}
}
for(i=0;i<10;i++)
{
if(sz[i]==-1)
{
continue;//数组前头零
}
if(sz[i]==-3)
{
break;//数组后头零
}
if(sz[i]==-2||sz[i]==0)
{
if(sz[i]==0&&d>=1&&(k==5||k==6))//不超过亿,中间连续多0
{
weisu(5);//调用函数
}
jiance(sz[i]);//调用函数
k--; //数组中间零
continue;
}
jiance(sz[i]);//调用函数
weisu(k);//调用函数
k--;
if(sz[i]==0&&k==5)
{
weisu(k);//调用函数
}
}
源代码
#include<stdio.h>
int jiance(int a);//函数
int weisu(int a);//函数
int main()
{
int rmb,a=0,b=0,i=9,j=0,k=10,l=0,f=0,d=0;
int sz[10]={0,0,0,0,0,0,0,0,0,0};//数组
scanf("%d",&rmb);
while(rmb>0)//存入数组
{
if(rmb<10)//是否为一位数
{
a=rmb;
sz[i]=a;
break;
}
else
{
a=rmb%10;//取最后一位
rmb/=10;//再把最后一位去掉
sz[i]=a;//保存到数组
i--;
}
}
if(rmb==0)
{
printf("a");
return 0;
}
//打印
for(i=9;i>0;i--) //
{ //
if(sz[i]!=0) //
break; //数组后头去0
else //
{
sz[i]=-3;//
//k--;
}
}
for(i=0;i<10;i++)//
{ //
if(sz[i]!=0){//
j=1; //
}else //
if(j!=1) //数组前头去0
{ //
j=0; //
sz[i]=-1;
k--; //k==位数
} //
}
for(i=0;i<10;i++)
{
if(sz[i]==0&&f==0)
{
f++;
}
else if(sz[i]==0)
{
sz[i]=-2;//数中间零
d++;
}
}
for(i=0;i<10;i++)
{
if(sz[i]==-1)
{
continue;//数组前头零
}
if(sz[i]==-3)
{
break;//数组后头零
}
if(sz[i]==-2||sz[i]==0)
{
if(sz[i]==0&&d>=1&&(k==5||k==6))//不超过亿,中间连续多0
{
weisu(5);//调用函数
}
jiance(sz[i]);//调用函数
k--; //数组中间零
continue;
}
jiance(sz[i]);//调用函数
weisu(k);//调用函数
k--;
if(sz[i]==0&&k==5)
{
weisu(k);//调用函数
}
}
return 0;
}
//创建函数
int jiance(int a)
{
switch(a)
{
case(0):printf("a");break;
case(1):printf("b");break;
case(2):printf("c");break;
case(3):printf("d");break;
case(4):printf("e");break;
case(5):printf("f");break;
case(6):printf("g");break;
case(7):printf("h");break;
case(8):printf("i");break;
case(9):printf("j");break;
}
}
//创建函数
int weisu(int a)
{
switch(a)
{
case(0):break;
case(9):printf("Y");break;
case(8):printf("Q");break;
case(7):printf("B");break;
case(6):printf("S");break;
case(5):printf("W");break;
case(4):printf("Q");break;
case(3):printf("B");break;
case(2):printf("S");break;
}
}
!!!您的点赞和支持,是我更新的最大动力!!!