PTA乙级1002

分享一位初学者使用C语言解决PTA乙级挑战的心得,从字符数组处理大整数到优化代码逻辑,包括遇到的错误和解决方案,旨在提升C技能并通过乙级考试。

记录一些冲刺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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值