PS:跪求有空的大佬们给点参考建议,谢谢谢
。
。
。
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
//我用的很复杂的方法,输入不超过9位的数字,故把输入的数字分成三组a1,a2,a3分别对应 亿位部分(第9位)万位部分(5-8位)个十百千位部分(1-4位)
再分别进行计算输出
答案代码:
#include<stdio.h>
int pow1(int c)
{
if(c==0)
return 1;
int t,sum=10;
for(t=1;t<c;t++)
{
sum*=10;
}
return sum;
}
int main()
{
int in,t,a1,a2,a3,c,pd;
scanf("%d",&in);
a3=in%10000;
a2=(in-a3)%100000000/10000;
a1=in/100000000;
if(a1!=0)
printf("%cY",a1+97);
for(c=0;a2;)
{
if(a2%10==0)
{
c++;
a2=a2/10;
}
else
break;
}
a3=in%10000;
a2=(in-a3)%100000000/10000;
if(a2!=0)
{
if(a2>=1000)
t=3;
else if(a2>=100&&a2<1000)
t=2;
else if(a2>=10)
t=1;
else
t=0;
for(pd=0;t>=0&&t>=c;t--)
{
if(pd==1&&a2/(int)pow1(t)==0)
continue;
printf("%c",a2/(int)pow1(t)+97);
if(a2/(int)pow1(t)==0)
pd=1;
if(a2/(int)pow1(t)!=0)
switch(t)
{
case 3:printf("Q");break;
case 2:printf("B");break;
case 1:printf("S");break;
}
a2=a2%(int)pow1(t);
}
printf("W");
}
a3=in%10000;
a2=(in-a3)%100000000/10000;
for(c=0;a3;)
{
if(a3%10==0)
{
c++;
a3=a3/10;
}
else
break;
}
a3=in%10000;
a2=(in-a3)%100000000/10000;
if(a3!=0)
{
if(a2==0)
{
if(a3>=1000)
t=3;
else if(a3>=100&&a3<1000)
t=2;
else if(a3>=10)
t=1;
else
t=0;
}
else
t=3;
for(pd=0;t>=0&&t>=c;t--)
{
if(pd==1&&a3/(int)pow1(t)==0)
continue;
printf("%c",a3/(int)pow1(t)+97);
if(a3/(int)pow1(t)==0)
pd=1;
if(a3/(int)pow1(t)!=0)
switch(t)
{
case 3:printf("Q");break;
case 2:printf("B");break;
case 1:printf("S");break;
}
a3=a3%(int)pow1(t);
}
}
else
printf("a");
return 0;
}
总结:
个人认为,这不该是个难题,关键问题还是在我的思路上,这种计算办法本就不好实现,但我还是固执的想把它改对(不停的调试修改),以至于我做了很久(大概用了2、3个小时,相当于大半个编程竞赛的时间)我不可能在一个题上用这么久磨出来正确答案的,这不现实。—— 这是我该改进的地方,没好的思路做出一部分就该跳,不能一直磨
其次,可能是我的思路问题(比较麻烦),我认为这是个很好的题,五个测试点又不复杂但又不那么容易让你看(或测试)出来问题,若没有测试点提示,我想我可能永远也改不对,因为我是参照给的提示来用不同的输入测试的,毕竟题目只给了两个样例,两个不多也不少,既能让你联系文字看懂题的大大意,又没有把题里的坑提示给你(真是辛苦出题人了)
总之如果看了我思路和代码的人想更深的学懂这道题,建议按每个测试点提示再联系代码深入思考一下