题目描述:
给定两个大整数p、q。请你求出p整除q的商和余数。
输入格式:
第一行为大整数p(不超过1000位)。
第二行为大整数q(不超过1000位)。
输出格式:
两行,
第一行为商。
第二行为余数
样例输入:
512 12
样例输出:
42 8
#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001],c[10001],t[10001];
int compare(int aa[],int tt[]){
if(aa[0]<tt[0]) return -1;
if(aa[0]>tt[0]) return 1;
for(int i=aa[0];i>=1;i--){
if(aa[i]>tt[i]) return 1;
if(aa[i]<tt[i]) return -1;
}
return 0;
}//比较大小
void numcpy(int bb[],int tt[],int n){
for(int i=1;i<=bb[0];i++){
tt[n++]=bb[i];
}
tt[0]=n-1;
}//构造减数,t数组从第n位开始存b数组
int main(){
string s1,s2;
cin>>s1>>s2;//输入两个字符串s1,s2
a[0]=s1.size();
b[0]=s2.size();
c[0]=a[0]-b[0]+1;//长度
if(c[0]<=0){
cout<<"0"<<endl<<s1;
return 0;
}
for(int i=1;i<=a[0];i++){
a[i]=s1[a[0]-i]-'0';
}
for(int i=1;i<=b[0];i++){
b[i]=s2[b[0]-i]-'0';
}//倒序放进int数组
for(int j=c[0];j>=1;j--){
numcpy(b,t,j);
while(compare(a,t)>=0){
c[j]++;
for(int i=1;i<=t[0];i++) a[i]=a[i]-t[i];
for(int i=1;i<=t[0];i++){
if(a[i]<0){
a[i+1]--;
a[i]+=10;
}
}//高精度减法,被减数a去减构建的减数t
while(a[0]>1&&a[a[0]]==0) a[0]--;//高位去零
}
}
while(c[0]>1&&c[c[0]]==0) c[0]--;//高位去零
for(int i=c[0];i>=1;i--){
cout<<c[i];
}
cout<<endl;
for(int j=a[0];j>=1;j--){
cout<<a[j];
}//倒序输出
return 0;
}