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);
}