B1016 部分A+B

B1016 部分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~的值。

输入样例1

3862767 6 13530293 3

输出样例1

399

输入样例2

3862767 1 13530293 8

输出样例2

0

代码

/**********************************************************************
Copyright          2018-06-20, huangzihan.
File name          part_of_A_to_B 
Description        正整数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~,中间以空格分隔,
                   其中0 < A, B < 10^10^; 
Author             huangzihan
Version            1.1.1.201806020_release
Date               2018.06.20
Time Limit         400ms
Memory Limit       65536KB
Code length limit  16KB 
***********************************************************************/ 

#include<stdio.h>
int main(void)
{
    /******************************************** 
    因为10的10次方已经超过long的最大值2147483647; 
    所以在声明变量时,选用long long类型整数; 
    统一变量类型,避免转换的问题; 
    ********************************************/
    long long a, b, d_a, d_b;
    scanf("%lld %lld %lld %lld", &a, &d_a, &b, &d_b);
    long long p_a = 0, p_b = 0;
    while(a != 0)
    {      
        /************************************** 
        if括号里表达式判断当前值和D~A~是否相等;
        想等的话就把D~A~加到P~A~里;
        然后再将P~A~扩大十倍;  
        **************************************/ 
        if(a % 10 == d_a) p_a = p_a * 10 + d_a; 
        a = a / 10;//每次数字中的最高位通过除10求出来; 
    }
    while(b != 0)
    {      
        if(b % 10 == d_b) p_b = p_b * 10 + d_b;
        b = b / 10; 
    }
    printf("%lld\n", p_a + p_b);
}

猜你喜欢

转载自blog.csdn.net/qq_15299517/article/details/80753750