PAT:B1016 部分A+B(15 分)
正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。
现给定 A、DA、B、DB,请编写程序计算 PA+PB。
输入格式:
输入在一行中依次给出 A、DA、B、DB,中间以空格分隔,其中 0<A,B<1010。
输出格式:
在一行中输出 PA+PB 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
思路:
A中有Da的个数,然后将其组成新的整数Pa
1.现获取Da的个数,
2.获取数Pa
3.将两个数相加
注意:因为A,B的范围是(0, 10^10)所以A,B, countA, countB定义成long long
代码:
C/C++:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main() {
// 题意: A中的 x部分 , 与个数组成 另一个数字, 两个这样的数相加
// 思路: 1. 定义两个count 用来记录,A和B的值
long long A, B, Pa = 0, Pb = 0;
int Da, Db, x;
scanf("%lld %d %lld %d", &A, &Da, &B, &Db);
while(A != 0) {
x = A % 10;
if(x == Da) {
Pa = Pa * 10 + Da;
}
A = A / 10;
}
while(B != 0) {
x = B % 10;
if(x == Db) {
Pb = Pb * 10 + Db;
}
B = B / 10;
}
printf("%lld", (Pa+Pb));
return 0;
}
java:
import java.util.Scanner;
public class Main {
public static void main(String[ ] args) {
Scanner in = new Scanner(System.in);
long A, countA = 0, B, countB = 0;
int Da, Db;
A = in.nextInt();
Da = in.nextInt();
B = in.nextInt();
Db = in.nextInt();
while (A != 0) {
if(A % 10 == Da) {
countA = countA * 10 + Da;
}
A = A / 10;
}
while (B != 0) {
if (B % 10 == Db) {
countB = countB * 10 + Db;
}
B = B / 10;
}
System.out.println((countA + countB));
}
}