题目内容
正整数 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
解题思路
方法一 原始方法
传入字符串A,B 字符da,db,遍历字符串,统计字符出现的次数,定义一个新的函数传入da,db以及他们在字符串中出现的次数,将字符形转换为整形,然后通过pow函数累加起来,最后返回两个累加和之和。
方法二 利用c++ string新特性 来做
除了题目要求定义的四个数据外,再额外定义两个字符串A,B,push_back()存放字符,然后定义一个String转换为int的函数,解题思路与方法一相同。
详细代码
方法一
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int fun(char a,char b,int counta,int countb){
int suma = 0,sumb = 0;
int ka = a-'0';
int kb = b-'0';
for(int i = 0;i<counta;i++){
suma+=pow(10,i)*ka;
}
for(int i = 0;i<countb;i++){
sumb+=pow(10,i)*kb;
}
return suma+sumb;
}
int main(){
string A,B;
char da,db;
int counta = 0,countb = 0;
cin>>A>>da>>B>>db;
for(int i = 0;i<A.length();i++){
if(A[i]==da) counta++;
}
for(int i = 0;i<B.length();i++){
if(B[i]==db) countb++;
}
cout<<fun(da,db,counta,countb);
}
方法二
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
int s2i(string s){
stringstream ss;
int k;
ss<<s;
ss>>k;
return k;
}
int main(){
cin.tie();
string A,B,AA,BB;
char a,b;
cin>>A>>a>>B>>b;
for(int i = 0;i<A.size();i++) {
if(A[i] == a) AA.push_back(a);
}
for(int i = 0;i<B.size();i++) {
if(B[i] == b) BB.push_back(b);
}
cout<<s2i(AA)+s2i(BB);
return 0;
}