美文网首页PAT
1016.部分A+B

1016.部分A+B

作者: yzbkaka | 来源:发表于2018-07-25 15:24 被阅读4次

    题目描述

    正整数 A 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​。例如:给定 A=3862767,D​A​​=6,则 A 的“6 部分”P​A​​ 是 66,因为 A 中有 2 个 6。
    现给定 A、D​A​​、B、D​B​​,请编写程序计算 P​A​​+P​B​​。

    输入描述

    输入在一行中依次给出 A、D​A​​、B、D​B​​,中间以空格分隔,其中 0<A,B<10​10​​。

    输出描述

    在一行中输出 P​A​​+P​B​​ 的值。

    输入例子

    3862767 6 13530293 3

    输出例子

    399

    我的代码

    #include<stdio.h>
    #include<math.h>
    #define N 15
    int main(){
        char a[N],b[N];   //使用字符串来存储输入
        char d1,d2;   //存储DA,DB
        int i,j=0,k=0,sum1=0,sum2=0;
        scanf("%s %c %s %c",a,&d1,b,&d2);
        for(i=0;i<N;i++){
            if(a[i]==d1){
                j++;  //记住DA出现的次数
            }
        }
        for(i=0;i<N;i++){
            if(b[i]==d2){
                k++;   //记住DB出现的次数
            }
        }
        for(i=j;i>0;i--){
            sum1=sum1+(d1-48)*pow(10,i-1);   //按照规律求和
        }
        for(i=k;i>0;i--){
            sum2=sum2+(d2-48)*pow(10,i-1);
        }   
        printf("%d",sum1+sum2);
        return 0;
    } 
    

    我的分析

    这道题我是一次就过,应该是比较简单的。首先我是创建了a[N],b[N]两个字符串,因为在后面进行查找的时候字符串比数组要好用许多,然后d1,d2也是以字符的形式进行输入,同样是为了方便查找。接着就是用循环来进行查找,并用j,k来计数,然后是进行求和,开在求和的时候遇到了一点小麻烦,因为d1,d2是字符,不能直接进行乘法运算,所以我采用的是用ASCⅡ码来换算(其实记住一些特殊字符的ACSⅡ码对于解题是很有帮助的例如A-65,a-97,0-48)这里是是直接将d1,d2减去48即可。

    相关文章

      网友评论

        本文标题:1016.部分A+B

        本文链接:https://www.haomeiwen.com/subject/vwipmftx.html