PAT1016 部分A+B

正整数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。
样例1

3862767 6 13530293 3

样例2

3862767 1 13530293 8

输出

在一行中输出PA + PB的值。
样例1

399

样例2

0

代码

#include<iostream>
#include<math.h>
using namespace std;

int main(){
	string A,B;
	char DA,DB;
	cin>>A>>DA>>B>>DB;
	int pa,pb=0;
	for(int i=0;i<A.size();i++){
		if(DA==A[i])pa=pa*10+(DA-'0');
	}
	
	for(int i=0;i<B.size();i++){
		if(B[i]==DB)pb=pb*10+(DB-'0');
	}
	cout<<pa+pb;
	return 0;
}

PAT1017 A除以B

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,
使得A = B * Q + R成立。

输入

输入在1行中依次给出A和B,中间以1空格分隔。

123456789050987654321 7

输出

在1行中依次输出Q和R,中间以1空格分隔。

17636684150141093474 3

代码

#include<iostream>
#include<vector>
using namespace std;
int main(){
	string s;int c;
	cin>>s>>c;
	vector<int> A,B;
	
	for(int i=0;i<s.size();i++){
		A.push_back(s[i]-'0');
	}

	int x=0;//余数  123456/7  6/7=0+6
	for(int i=0;i<A.size();i++){
		 if(A[i]+x*10<c){//不够除	
			B.push_back(0);//商0 
			x=A[i];
		}else {//够除 
			B.push_back((A[i]+x*10)/c);
			x=(A[i]+x*10)%c;
			
		}
		
	}
	if(B[0]==0&&B.size()>1){
		B.erase(B.begin());//除去前导0,只有第一位为0? 
	}
	//遍历输出商 
	for(int i=0;i<B.size();i++){
		cout<<B[i];	
			
}	cout<<" "<<x;//输出余数 
	return 0;
}