专栏:PAT乙级刷题笔记
题目
正整数 A A A 的“ D A D_A DA(为 1 位整数)部分”定义为由 A A A中所有 D A D_A DA组成的新整数 P A P_A PA。例如:给定 A A A=3862767, D A D_A DA=6,则 A A A 的“6 部分” P A P_A PA是 66,因为 A 中有 2 个 6。
给定 A A A、 D A D_A DA、 B B B、 D B D_B DB请编写程序计算 P A + P B P_A+ P_B PA+PB。
输入格式
一行中给出 A A A、 D A D_A DA、 B B B、 D B D_B DB,中间以空格分隔,其中 0 < A 0<A 0<A, B < 1 0 10 B<10^{10} B<1010
输出格式
一行中输出 P A + P B P_A+ P_B PA+PB的值。
输入样例
3862767 6 13530293 3
输出样例
399
分析
题目比代码长系列。按字符串接受 A A A和 D A D_A DA,然后匹配到后再把对应的数转成int型。具体见代码,很简单的。
代码
#include<iostream>
#include<string>
using namespace std;
int P(string s,char D){
int sum = 0,p = 1;//用p表示“位数”,个位乘1,十位乘10等
for(int i = 0;s[i];++i)
if(s[i] == D){
sum = sum + (s[i] - '0')*p;//转成数字
p *= 10;//找到了一个,p乘以10,相当于进一位
}
return sum;
}
int main(){
string A,B;
char Da,Db;
cin>>A>>Da>>B>>Db;
cout<<P(A,Da)+P(B,Db);
}