1.题目
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
2.分析
对于连续0、首尾0的考虑应当全面
3.代码
第一次尝试(❌):未考虑全面 0 的问题
#include <stdio.h>
int main()
{
int Num[10],i=0,j=0,len=0,Money; //定义数组接受每个数字
scanf("%d",&Money);
while(Money)
{
Num[i++]=Money%10; //逆序存储 并用i记录位数长度
Money/=10;
}
for(j=i-1;j>=0;j--)
{
if(Num[j]!=0) //如果数字不为零的时候,并不打印
{
printf("%c",Num[j]+97); //输出每位数字
switch(j+1)
{
case 1: break;
case 2: printf("S"); break;
case 3: printf("B");break;
case 4: printf("Q");break;
case 5: printf("W");break;
case 6: printf("S");break;
case 7: printf("B");break;
case 8: printf("Q");break;
case 9: printf("W");break;
case 10: printf("Y"); break;
default: break;
}
}
}
return 0;
}
尝试2:依旧未解决
#include <stdio.h>
int main()
{
int Num[10],i=0,j=0,Money,flag=0; //定义数组接受每个数字
scanf("%d",&Money);
if(Money==0) //考虑只有0的时候
printf("a");
while(Money)
{
Num[i++]=Money%10; //逆序存储 并用i记录位数长度
Money/=10;
}
for(j=i-1;j>=0;j--)
{
if(Num[j]!=0) //如果数字不为零的时候,并不打印
{
printf("%c",Num[j]+97); //输出每位数字
switch(j+1)
{
case 1: break;
case 2: printf("S"); break;
case 3: printf("B");break;
case 4: printf("Q");break;
case 5: printf("W");break;
case 6: printf("S");break;
case 7: printf("B");break;
case 8: printf("Q");break;
case 9: printf("Y");break;
default: break;
}
}
}
return 0;
}
尝试3:设计计数是否为连续0
#include <stdio.h>
int main()
{
int Num[10],i=0,j=0,k=0,count=0,Money,flag=0,Digital_count=0; //定义数组,及变量
scanf("%d",&Money);
if(Money==0) //考虑只有0的时候
printf("a");
while(Money)
{
Num[i++]=Money%10; //逆序存储 并用i记录位数长度
Money/=10;
}
for(j=i-1;j>=0;j--)
{
if(Digital_count%4==0) //四位一组
{
Digital_count++;
flag=0;
}
count=0;
k=j;
while(k>=0) //判断是否为连续0
{
if(Num[k%4]==0)
count++;
k--;
}
if(count>0&&flag==0) //有0存在
if(k%4==0&&Num[k]!=0) //并且每四位的末尾不为0
{
printf("a"); //只打印1次0
flag=1;
}
if(Num[j]!=0) //如果数字为零的时候,并不打印
{
printf("%c",Num[j]+97); //输出每位数字
switch(j+1)
{
case 1: break;
case 2: printf("S"); break;
case 3: printf("B");break;
case 4: printf("Q");break;
case 5: printf("W");break;
case 6: printf("S");break;
case 7: printf("B");break;
case 8: printf("Q");break;
case 9: printf("Y");break;
default: break;
}
}
}
return 0;
}
尝试四:未考虑多打印0
尝试五:
4.总结
还挺崩溃的
5.更新日志
2022.3.13 题目上传
2022.3.14 整理解法
2022.3.15 继续尝试