正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 8,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。
现给定 A、DA、B、DB,请编写程序计算 PA+PB。
输入格式:
输入在一行中依次给出 A、DA、B、DB,中间以空格分隔,其中 0。
输出格式:
在一行中输出 PA+PB 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
思路:刚好想练练手就用string类的函数了
代码:
#include<iostream> #include<string> using namespace std; int main() { string s1, s2;// 从s1中找a,统计a出现的次数 string a, b; long long sum1, sum2, suma;//怕超出范围,定大一些 while (cin >> s1 >> a >> s2 >> b) { int cnt1 = 0, cnt2 = 0;//定义次数变量 int t1 = 1, t2 = 1; sum1 = sum2=suma=0; int n1 = s1.size(); int n2 = s2.size(); while (s1.find(a) != string::npos)//find(string s)函数输出字串出现的第一个位置,不存在则输出string::npos; { int k = s1.find(a) + 1;//找到a位置之后的位置 s1 = s1.substr(k,n1-k);//s1从第K个位置开始的所有元素全部复制到新的s1,其中n1-k表示个数 cnt1++; } while (s2.find(b) != string::npos) { int k = s2.find(b) + 1; s2 = s2.substr(k , n2 - k); cnt2++; } if (cnt1 == 0 && cnt2 == 0) cout << "0" << endl; else { while (cnt1--) { sum1 += t1 *(long long) stoi(a);//写一题学一个知识 stoi(string*)函数,函数参数为string类,将串转化成int类的整型数 t1 *= 10;//如果用atio则要atio(a.c_str());atio(const char*)此为其函数原型 }//如a=3,cnt=3,所有sum1=3*1+3*10+3*100; while (cnt2--) { sum2 += t2 *(long long) stoi(b); t2 *= 10; } suma = sum1 + sum2; cout << suma << endl; } } return 0; }