1016 部分A+B (15 分)
正整数 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<10^10
输出格式:
在一行中输出 PA+PB的值:
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
乍一看,感觉简单嘛,但是,好久没写代码,真的,下手难,我太难了…
【方法一】
#include<iostream>
using namespace std;
int change(int M,int N){ //求P
int K=0;
for(int i=0;M!=0;i++){
if(M%10==N){
K=K*10+N;
M=M/10;}
else
M=M/10;
}
return K;
}
int main(){
int A,B,D1,D2;
cin>>A>>D1>>B>>D2;
cout<<change(A,D1)+change(B,D2)<<endl;
return 0;
}
**【方法二】string+int **
#include<iostream>
#include<string>
using namespace std;
int main() {
string A, B;
int DA, DB;
cin>>A>>DA>>B>>DB;
int resultA = 0; //最后结果
int resultB = 0;
for(int i = 0; i < A.length(); i++)
if ((A[i] - '0') == DA)
resultA = resultA * 10 + DA;
for(int i = 0; i < B.length(); i++)
if ((B[i] - '0') == DB)
resultB = resultB * 10 + DB;
cout<<resultA+resultB<<endl;
return 0;
}
**【方法三】 char+int **
#include<iostream>
using namespace std;
int cal_p(char *a,int b)//将字符串a与da进行对比计算pa
{
int i=0,count=0;
while(a[i]!='\0')//循环读取字符串中的数字
{
count =(a[i]-'0')==b?count+1:count;//数字相同则增加count
i++;
}
int cal=0;//计算pa
for(int i=0;i<count;i++){
cal+=b;
b*=10;}
return cal;
}
int main(){
char a[11], b[11];
int da,db;
cin>>a>>da>>b>>db;
cout << cal_p(a, da)+cal_p(b,db);
return 0;
}
【方法四】
用c++中string可以不用考虑其字符串长度,对其类型进行转换,将得到的数据从字符串类型转换为整型,sstream函数里的stringstream可以实现
void main(){
// int 转 string
stringstream ss;
int n = 123;
string str;
ss<<n;
ss>>str;
// string 转 int
str = “456”;
n = atoi(str.c_str());}
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(){
string s1, s2;
string a = "";
string b = "";
char Da, Db;
cin >> s1 >> Da >> s2 >> Db;
/* 下标操作符[] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。
对于常量字符串,使用下标操作符时,字符串的最后字符(即 '\0')是有效的。
对应 string 类型对象(常量型)最后一个字符的下标是有效的,调用返回字符 '\0'。
函数 at() 在使用时会检查下标是否有效。
如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。*/
for(int i = 0; i < s1.length(); i++){
if(s1.at(i) == Da){ //s1.at()类似指针
a =a+ s1.at(i);}
}
for(int i = 0; i < s2.length(); i++){
if(s2.at(i) == Db){
b = b + s2.at(i);}
}
int pa = 0, pb = 0;
stringstream ss1, ss2; //包含在sstream函数中,可以将字符串类型转换为整型
ss1 << a; //向ss1流中传入a
ss1 >> pa; //向pa中写入流入ss1后转换成int类型的值
ss2 << b; //向ss2流中传入b
ss2 >> pb; //向pb中写入流入ss2后转换成int类型的值
cout << pa + pb << endl;
return 0;
}