PAT Basic 1016. 部分A+B (15) (C语言实现)
题目
正整数 $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^{9}$ 。
输出格式:
在一行中输出 $P_A + P_B$ 的值。
输入样例 1:
1
3862767 6 13530293 3
输出样例 1:
1
399
输入样例 2:
1
3862767 1 13530293 8
输出样例 2:
1
0
鸣谢用户 George Hu 修正数据范围!
思路
$2^{31} \lt 2\times 10^{10}$,因此要用long int
。
代码
Github最新代码,欢迎交流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
long Dpart(long A, int D_A)
{
long P_A;
for (P_A = 0; A; A /= 10)
if (A % 10 == D_A)
P_A = P_A * 10 + D_A;
return P_A;
}
int main()
{
long A, B;
int D_A, D_B;
scanf("%ld %d %ld %d", &A, &D_A, &B, &D_B);
printf("%ld", Dpart(A, D_A) + Dpart(B, D_B));
return 0;
}