记录一些冲刺pta乙级的经验跟反思整理自己的代码,全是纯c写的(毕竟c是我最熟的语言了)
希望可以用c就把乙级考过去吧。。。。。。
ok,开始看到整个题目的时候,我觉得可以用int去定义n,然后仔细一看10的100次方,打扰了。
于是想到用字符数组处理大的整数,之后用ascall码转换,开始傻不拉几想到用个cnt计数器去记录位数???我对我的智商感到了迷惑。。。。。。
后来我想用b[]数组去保存每次sum%10的结果,就很悲催发现个位0没办法去掉,比如sum=10,输入数组01,但你输出不能是ling yi对吧,所以这个是错误的,于是我终于想起来了那个字符串长度函数strlen,用个for循环得到sum。
(看了网上大家几乎都是用python或者Java写的,欸,我都不太熟,只能用麻烦一点的c,希望借此可以巩固c的学习成果吧。。。。。。)
所以我后面不能再用这个strlen,要不然会出现sum=100 有可能有00100这种情况出现。所以最好后面不用固定数组,直接对sum分类讨论,个位数直接输入,十位数/10再%10输出,一位一位输出,百位。。。。。。反正最后终于全对了。
(有什么问题或者意见在评论区指出来,作者只是个刚学完c的萌新)感谢大家!
#include <stdio.h>
#include <stdlib.h>
#define max 10005
void print_sum(int sum)
{
switch(sum)
{
case 0: printf("ling");break;
case 1: printf("yi");break;
case 2: printf("er");break;
case 3: printf("san");break;
case 4: printf("si");break;
case 5: printf("wu");break;
case 6: printf("liu");break;
case 7: printf("qi");break;
case 8: printf("ba");break;
case 9: printf("jiu");break;
}
}
int main()
{
char a[max];
int i,sum,len;
int b[10];
i=sum=len=0;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
sum+=a[i]-'0';
}
if(sum<10)
{
print_sum(sum);
}
else if(sum>=10&&sum<100)
{
print_sum(sum/10);
printf(" ");
print_sum(sum%10);
}
else
{
print_sum(sum/100);
printf(" ");
print_sum(sum%100/10);
printf(" ");
print_sum(sum%10);
}
return 0;
}
分享一位初学者使用C语言解决PTA乙级挑战的心得,从字符数组处理大整数到优化代码逻辑,包括遇到的错误和解决方案,旨在提升C技能并通过乙级考试。
495

被折叠的 条评论
为什么被折叠?



