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

题目链接在此。

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

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

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

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

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

#include

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

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的输入格式控制!!!

你可能感兴趣的:(PAT,(Basic,Level),Practice)