PTA–1016 部分A+B (15分)
题目:
正整数 A 的“ D A D_A DA(为 1 位整数)部分”定义为由 A 中所有 D A D_A DA组成的新整数 P A P_A PA.例如:给定A = = = 3862767, D A = 6 D_A= 6 DA=6 则 A 的“6 部分” P A P_A PA 是66,因为 A 中有 2 个 6,现给定 A , D A , B , D B A,D_A,B,D_B A,DA,B,DB 请编写程序计算 P A + P B P_A+P_B PA+PB
输入格式:
输入在一行中依次给出 A , D A , B , D B A,D_A,B,D_B A,DA,B,DB,中间以空格分隔.其中0 < A,B < 1010
输出格式:
在一行中输出 P A + P B P_A+P_B PA+PB的值
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
题目分析:
- 法一 用while语句加上if判断确定每个数组成的新整数
- 法二 在法一的基础上用函数封装判断语句和if判断,使代码简洁,可读性更高
代码如下:
//法一
#include<bits/stdc++.h>
using namespace std;
int main()
{
int da,pa,db,pb;
long long a,b;
scanf("%lld%d%lld%d",&a,&da,&b,&db);
long long suma=0,sumb=0;
while(a>0){
int num=a%10;
if(num==da) suma=suma*10+num;
a/=10;
}while(b>0){
int num=b%10;
if(num==db) sumb=sumb*10+num;
b/=10;
}printf("%lld",suma+sumb);
}
//法二
#include<stdio.h>
long long fun(long long num,int digit){
long long ans=0;
while(num){
if(digit==num%10) ans=ans*10+digit;
num/=10;
}
return ans;
}
int main(){
long long A,B;
int Da,Db;
scanf("%lld %d %lld %d",&A,&Da,&B,&Db);
printf("%lld",fun(A,Da)+fun(B,Db));
}