题目描述
正整数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 < 1010。
输出
在一行中输出PA + PB的值。
样例输入
3862767 6 13530293 3 3862767 1 13530293 8
样例输出
399 0
这里介绍一个神器:stringstream,可以把字符串转换为数字,思路很简单,就是用对东西了,先统计子串的个数,再用循环变成数字,最后相加
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<sstream>
using namespace std;
string x,a,y,b;
long long count(string str, string sub)//统计子串个数函数
{
long long num = 0;
for (long long i = 0; (i = str.find(sub, i)) != std::string::npos; num++, i++);
return num;
}
int main()
{
while(cin>>x>>a>>y>>b)
{
long long cna=count(x,a) , cnb=count(y,b) ,la=a.length()*10 , lb=b.length()*10 ,ansa=0,ansb=0,ans,t1,t2;
stringstream ss1(a);
ss1>>t1;//变成数字
while(cna--) ansa*=la,ansa+=t1;
stringstream ss2(b);
ss2>>t2;//同理
while(cnb--) ansb*=lb,ansb+=t2;
cout<<ansa+ansb<<endl;
}
return 0;
}