1016 部分A+B——C/C++实现

版权声明:本文为博主原创文章,转载请务必注明出处和作者,谢谢合作! https://blog.csdn.net/zhanshen112/article/details/84351297

题目

1016 部分A+B (15 point(s))

正整数 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​​ 的值。

输入样例 1:

3862767 6 13530293 3

 

输出样例 1:

399

 

输入样例 2:

3862767 1 13530293 8

 

输出样例 2:

0

算法

这道题目难度不大,所给数据也没有考察数据类型,只要用int即可。代码1是C写的,通过依次除10将各位数字取出来进行比较。但是如果数据极其大,就只能通过字符串的形式处理。见代码1.

代码2通过逐个比对字符串的每一个字符,并进行相应的表示。见代码2。

代码

代码1、C

//pat1061v1

#include <stdio.h>

#include <math.h>


int CountP(int a,int da){

        int i=0,pa=0;

        while(a>0){

               if(a%10==da)   i++;    //the num of da

               a=a/10;       

        }

        while(i!=0){

               pa+=da*pow(10,i-1);

               i--;

        }

        return pa;

}

int main(){

        int a,da,b,db;

        scanf("%d %d %d %d",&a,&da,&b,&db);  

        printf("%d",CountP(a,da)+CountP(b,db));      

}

代码2、C++

#include <iostream>

#include <string>

using namespace std;


int main(){

        string a,b;

        int da,db,sa=0,sb=0;

        cin>>a>>da>>b>>db;

        for(int i=0;i<a.length() ;i++){

               if(a[i]-'0'==da)       sa=sa*10+da;

        }

        for(int i=0;i<b.length() ;i++){

               if(b[i]-'0'==db)       sb=sb*10+db;

        }

        cout<<sa+sb;

}

 

猜你喜欢

转载自blog.csdn.net/zhanshen112/article/details/84351297