PAT-B 1016. 部分A+B (15)

这篇博客介绍了PAT-B 1016题目的解题思路,重点讨论了如何处理由n个x组成的整数,并提到了使用scanf的输入格式控制符 `%lld` 和 `%d` 的重要性。博主首先考虑通过遍历字符数组来判断相等个数,但最终采用了整数处理的方法,通过除法和取余运算求解。代码实现简洁,再次强调输入格式控制的关键作用。
摘要由CSDN通过智能技术生成

题目链接在此

这个题目在做的过程中发现需要注意的点有:

  1. scanf的输入控制符(%lld,%d),可参见这篇文章
  2. 若一个数由n个x组成,求这个数

以上也是解这道题目的关键所在。

刚开始的思路是想:
将输入的A,B读入char[]数组中,然后用循环判断每一位是否等于DA,DB,得到等于DA,DB的个数,然后得出PA,PB,最后求得结果。这种方法也不算复杂。

后来想到,既然又是整数的处理,是否能用除法和取余这两种运算呢?后来想通了,《算法笔记》上的解法也是如此,代码如下:

#include<stdio.h>

int main(){

    long long A,B;
    int DA,DB;
    int PA = 0,PB = 0;

    int JA,JB;
    int sa = 0, sb = 0;

    scanf("%lld %d %lld %d",&A,&DA,&B,&DB);

    //拿到A中DA的个数 
    while( A != 0 ){

        JA = A % 10;
        if( JA == DA ){
            sa ++;
        } 
        A /= 10;
    }

    //拿到B中DB的个数 
    while( B != 0 ){

        JB = B % 10;
        if(JB == DB){
            sb++;
        } 
        B /= 10; 
    }

    //求PA 
    if(sa){
        PA = DA;
        for(int i = 1; i < sa; i++){
            PA = PA*10 + DA;
        }
    }

    //求PB 
    if(sb){
        PB = DB;
        for(int i = 1; i < sb; i++){
            PB = PB*10 + DB;
        }
    }


    printf("%d\n",PA+PB);

    return 0;
} 

其实代码可以简化成如下:

#include<stdio.h>

int main(){

    long long A,B;
    int DA,DB;
    int PA = 0,PB = 0;

    int JA,JB;
    int sa = 0, sb = 0;

    scanf("%lld %d %lld %d",&A,&DA,&B,&DB);

    //拿到A中DA的个数 
    while( A != 0 ){

        JA = A % 10;
        if( JA == DA ){
            PA = PA*10 + DA;
        } 
        A /= 10;
    }

    //拿到B中DB的个数 
    while( B != 0 ){

        JB = B % 10;
        if(JB == DB){
            PB = PB*10 + DB;
        } 
        B /= 10; 
    }

    printf("%d\n",PA+PB);

    return 0;
} 

最后,还是提醒自己注意scanf的输入格式控制!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值