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;
}