乙级|1016.部分A+B

题目描述

正整数 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即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,059评论 0 13
  • 啊编目送啊影回了寝室,并不着急着离开。他决定逛逛校园,看看啊影生活过的这个地方是什么样的。 不知不觉天色已晚,手机...
    骏野阅读 219评论 1 2
  • 在北京逛了一周,在离开前一天还不知道自己要去哪?回深圳吗?还是去别的地方,脑海里突然想到一个地方-泰山,...
    罗卜Rob阅读 195评论 0 0
  • 大家一定都看过《三国演义》吧,你最敬佩的人是谁,刘备?孙权?袁绍?还是卧龙先生诸葛亮呢?告诉你们,我最敬佩的人是曹...
    城门下阅读 461评论 0 0