高精度除法,输入a,b,输出a/b以及a%b的值,输出共两行。b<a<10^10000
#include<bits/stdc++.h>
using namespace std;
const int MaxLen=10005;
struct BigInt{
int a[MaxLen];
int len;
BigInt(string x="0"){
memset(a,0,sizeof(a));
len=x.length();
for(int i=0;i<len;i++)
a[len-1-i]=x[i]-'0';
while(len>1&&a[len-1]==0)
len--;
}
BigInt(long long x){
char tmp[MaxLen];
sprintf(tmp,"%lld",x);
string y=tmp;
*this=y;
}
};
istream& operator>>(istream &is,BigInt &x){
string s;
is>>s;
x=s;
return is;
}
ostream& operator<<(ostream &os,const BigInt &x){
for(int i=x.len-1;i>=0;i--)
os<<x.a[i];
return os;
}
BigInt operator+(const BigInt &x,const BigInt &y){
BigInt res;
res.len=max(x.len,y.len);
for(int i=0;i<res.len;i++)
res.a[i]=x.a[i]+y.a[i];
for(int i=0;i<res.len;i++){
res.a[i+1]+=res.a[i]/10;
res.a[i]%=10;
}
if(res.a[res.len])
res.len++;
return res;
}
BigInt operator-(const BigInt &x,const BigInt &y){
BigInt res=x;
for(int i=0;i<y.len;i++)
res.a[i]-=y.a[i];
for(int i=0;i<res.len;i++)
if(res.a[i]<0){
res.a[i]+=10;
res.a[i+1]--;
}
while(res.len>1&&res.a[res.len-1]==0)
res.len--;
return res;
}
BigInt operator*(const BigInt &x,const BigInt &y){
BigInt res;
res.len=x.len+y.len;
for(int i=0;i<x.len;i++)
for(int j=0;j<y.len;j++)
res.a[i+j]+=x.a[i]*y.a[j];
for(int i=0;i<res.len;i++){
res.a[i+1]+=res.a[i]/10;
res.a[i]%=10;
}
while(res.len>1&&res.a[res.len-1]==0)
res.len--;
return res;
}
bool operator<(const BigInt &x,const BigInt &y){
if(x.len!=y.len)return x.len<y.len;
for(int i=x.len-1;i>=0;i--)
if(x.a[i]!=y.a[i])
return x.a[i]<y.a[i];
return false;
}
pair<BigInt,BigInt> operator/(const BigInt &x,const BigInt &y){
BigInt res,_10=10;
res.len=x.len;
BigInt r;
for(int i=x.len-1;i>=0;i--){
r=r*_10+x.a[i];
res.a[i]=0;
while(!(r<y)){
r=r-y;
res.a[i]++;
}
//res.a[i]=r/y;
//r=r%y;
}
while(res.len>1&&res.a[res.len-1]==0)res.len--;
pair<BigInt,BigInt> p;
p.first=res;
p.second=r;
return p;
}
int main(){
BigInt x,y;
cin>>x>>y;
pair<BigInt,BigInt> z=x/y;
cout<<z.first<<endl<<z.second<<endl;
return 0;
}