PAT B1016 部分A+B

前言

传送门

正文

题目描述

正整数 A 的“ D A D​_A DA(为 1 位整数)部分”定义为由 A 中所有 D A D​_A DA
​ 组成的新整数 P A P​_A​​ PA。例如:给定 A=3862767, D A D_A DA=6,则 A 的“6 部分” P A P_A PA 是 66,因为 A 中有 2 个 6。现给定 A、 D A D_A DA​​ 、B、 D B D_B DB ,请编写程序计算 P A P_A PA​​ + P B P_B PB​​ 。

输入格式:

输入在一行中依次给出 A、 D A D_A DA​​ 、B、 D B D_B DB ,中间以空格分隔,其中 0<A,B<10​10​​ 。

输出格式:

在一行中输出 P A + P B P_A+P_B PA+PB 的值。

输入样例 1:

3862767 6 13530293 3

输出样例 1:

399

输入样例 2:

3862767 1 13530293 8

输出样例 2:

0

思路
  • 法一是通过字符串来处理的,循环遍历字符串中的每一位。
  • 法二直接枚举a的每一位,这时要注意题目中所给范围是 1 0 10 10^{10} 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;
} 

后记

我寄愁心与明月

全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务