正整数 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<109。
输出格式:
在一行中输出 PA+PB 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
//完整代码
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
string A,B;
char a,b;
int count1=0;
int count2=0;
cin>>A>>a>>B>>b;
for(int i=0;i<11;i++){
if(A[i]==a){
count1++;
}
if(B[i]==b){
count2++;
}
}
int pa=0,pb=0;
for(int i=0;i<count1;i++){
pa+=((a-'0')*pow(10,i)); //注意这里一定要a-'0',因为我们的a是字符类型,如果不减去'0'最后的pa值应该是a的ASCII码的计算值
//这种pow计算乘方会有一个误差,这个误差就是因为精确度的原因
}
for(int i=0;i<count2;i++){
pb+=((b-'0')*pow(10,i)); //注意这里一定要b-'0'
}
cout<<pa+pb;
}
首先我们先定义几个变量,在这里,为了便于判断我将待输入的四个值定义为字符以及字符串类型。string A,B; char a,b;
然后count1和count2分别代表我们的A中到底有几个a,我们的B中到底有几个b。
接下来我们进入循环来求出我们的count1和count2,其实就是一个判断过程。
然后我们就要求出我们的pa和pb了。我们知道如果a是6那我们怎么计算出pa为66呢?其实就是6*(10**0)+6*(10**1).......这其实也就是一个进位过程。
在接下来的for循环中我们计算pa+=((a-'0')*pow(10,i)); 在这里我强调一下,刚开始我们的a是定义成字符类型的,所以要将a-'0'得到他的数字类型来参与计算(如果不减去'0'最后的pa值应该是a的ASCII码的计算)
最后也计算出b,然后cout最后pa+pb的结果。
但是在这里我学习到一个知识点就是,c++在利用pow(a,b)计算a的b次方的时候,有时候会由于精确度的原因产生了一定的误差。pow(10, 2) 和pow(10, i)得到不同的结果-CSDN博客
//这个是我的c语言代码,这种方法里面A,B,a,b是整数类型(不是我第一种方法的字符类型)
//第二种方法还是比较简洁的
#include <stdio.h>
int main() {
int a, da, pa = 0;
int b, db, pb = 0;
scanf("%d%d%d%d", &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("%d", pa + pb);
return 0;
}