PAT B1016 部分A+B
前言
正文
题目描述
正整数 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的每一位,这时要注意题目中所给范围是 1010以内,因此需要使用long long 来存储a和b
参考题解
- 法一
#include<cstdio>
#include<cstring>
#include<cmath>
int main(){
char A[11],B[11];
int a,b,P1=0,P2=0,len1,len2;
scanf("%s%d%s%d",A,&a,B,&b);
len1=strlen(A);
len2=strlen(B);
for(int i=0;i<len1;i++){
if(A[i]-'0'==a){
P1=P1*10+a;
}
}
for(int i=0;i<len2;i++){
if(B[i]-'0'==b){
P2=P2*10+b;
}
}
printf("%d\n",P1+P2);
return 0;
}
- 法二
#include<cstdio>
int main(){
long long a,b,da,db,pa=0,pb=0;
scanf("%lld%lld%lld%lld",&a,&da,&b,&db);
while(a!=0){
if(a%10==da)pa=pa*10+da;
a=a/10;
}
while(b!=0){
if(b%10==db)pb=pb*10+db;
b=b/10;
}
printf("%lld\n",pa+pb);
return 0;
}
后记
我寄愁心与明月