PAT B1016 部分A+B (15 分)(C语言实现)
问题描述
正整数 A 的“D[A](为 1 位整数)部分”定义为由 A 中所有 D[A]组成的新整数 P[A]。例如:给定 A=3862767,D[A]=6,则 A 的“6 部分”P[A]是 66,因为 A 中有 2 个 6。
现给定 A、D[A]、B、D[B],请编写程序计算 P[A]+P[B]。
输入格式:
输入在一行中依次给出 A、D[A] 、B、D[B],中间以空格分隔,其中 0<A,B<1010 。
输出格式:
在一行中输出 P[A]+P[B] 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
思路
对于输入数据的获取,我有两种想法,第一个是使用字符串输入,后面比对字符串即可,第二个是使用long long类型输入,后面通过提取个位比对数字是否一样,这个比价难处理的点主要在于输入的问题上面,下面给出了两个版本的代码,可以自己试一试。
代码
//字符串类型
#include<stdio.h>
int main()
{
char A[11], B[11];
int DA, DB;
scanf("%s %d %s %d", A, &DA, B, &DB);
int PA=0, PB=0;
for (int i=0; A[i]!='\0'; i++){
if(DA==A[i]-'0'){
PA*=10;
PA+=A[i]-'0';
}
}
for (int i=0; B[i]!='\0'; i++){
if(DB==B[i]-'0'){
PB*=10;
PB+=B[i]-'0';
}
}
printf("%d", PA+PB);
return 0;
}
//使用long long类型
#include<stdio.h>
int main()
{
long long a,b;
int m,n,t;
scanf("%lld %d %lld %d",&a,&m,&b,&n);
int pa,pb;
pa=0,pb=0;
while(a)
{
t=a%10;
if(t==m)pa=pa*10+m;
a=a/10;
}
while(b)
{
t=b%10;
if(t==n)pb=pb*10+n;
b=b/10;
}
printf("%d",pa+pb);
return 0;
}