PAT B1016 部分A+B

题目地址:https://www.patest.cn/contests/pat-b-practise/1016

题目描述:

正整数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、B、DB,其中 DA 跟 DB 都是单个数字。将 A 中的数字 DA 全部拼在一起得到 PA,将 B 中的数字 DB 全都拼在一起得到 PB,输出 PA + PB。

样例解释:

样例 1:
A = 3862767,DA = 6 ;
B = 13530293 ,DB = 3
这样 6 在 A 中出现了两次,因此 PA = 66 ;而 3 在 B 中出现了三次,因此 PB = 333
最后输出 66 + 333 = 399。

样例 2:
A = 3862767,DA = 1;
B = 13530293,DB = 8.
这样 1 在 A 中出现了 0 次,因此 PA = 0;而 8 在 B 中出现了 0 次,因此 PB = 0。
最后输出 0 + 0 = 0。


解题思路:

令 PA 初值均为 0 ,枚举 A 中的每一位,如果该位恰好等于 DA,则令 PA = PA * 10 + DA,这样当枚举完 A 中的每一位之后,就得到了 PA。
同理,可以得到 PB。最后输出 PA + PB 即可。

注意:由于题目中给出的范围是10的10次方以内,这个范围是超过了 int 的,因此需要使用 long long 来存放 A 和 B。不过也可以用字符串来存储 A 和 B,方法其实都是一样的。


C++完整代码如下:

#include<cstdio>
int main(){
    long long a, b, da, db;
    scanf("%lld%lld%lld%lld", &a, &da, &b, &db);
    long long pa = 0, pb = 0;
    while(a != 0){      //枚举 a 的每一位
        if(a % 10 == da) pa = pa * 10 + da; //若当前位为 da,给 pa 增加一位 da
        a = a / 10; 
    }
    while(b != 0){      //枚举 b 的每一位
        if(b % 10 == db) pb = pb * 10 + db;
        b = b / 10; 
    }
    printf("%lld\n", pa + pb);
    return 0;
}

python 完整代码如下:

#coding=utf-8
def count(a,b):
    count=0
    for i in a:
        if i==b:
            count=count*10+int(b)
    return count
s=raw_input()  
a,b,c,d=s.split(" ")
print count(a,b)+count(c,d)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值