求助,自己写的高精除和高精模炸掉了!!!(キ`゚Д゚´)!!,具体是怎么回事?
#include<bits/stdc++.h>
#define maxn 50001
using namespace std;
int t,n,k;
struct Bigint{
int len,a[maxn],op;
char s[maxn];
Bigint(int x=0){
memset(a,0,sizeof(a));
if(x<0) op=-1,x=-x;
for(len=1;x;++len)
a[len]=x%10,x/=10;
len--;
strcpy(s,"");
}
int &operator[](int i){
return a[i];
}
void flatten(int L){
len=L;
for(int i=1;i<=len;++i)
a[i+1]+=a[i]/10,a[i]%=10;
for(;!a[len]&&len>1;)
--len;
if(a[len]==0) op=1;
}
void scan(){
scanf("%s",s);
len=strlen(s);
int st=0;
if(s[0]=='-') op=-1,st=1;
else op=1;
for(int i=st;i<len;++i)
a[len-i]=int(s[i]-'0');
if(op==-1) --len;
}
void print(){
if(op==-1) printf("-");
for(int i=max(len,1);i>=1;--i)
printf("%d",a[i]);
}
}a(0),b(0),c(0);
Bigint operator+(Bigint a,Bigint b){
Bigint c;
int len=max(a.len,b.len);
for(int i=1;i<=len;++i)
c[i]+=a[i]+b[i];
c.flatten(len+1);
return c;
}
Bigint operator-(Bigint a,Bigint b){
Bigint c;
int len=a.len;
for(int i=1;i<=len;++i){
if(a[i]<b[i]){
--a[i+1];
a[i]+=10;
}
c[i]=a[i]-b[i];
}
c.flatten(len);
return c;
}
Bigint operator*(Bigint a,int b){
Bigint c;
int len=a.len;
for(int i=1;i<=len;++i)
c[i]=a[i]*b;
c.flatten(len+11);
return c;
}
Bigint operator*(Bigint a,Bigint b){
Bigint c;
for(int i=1;i<=a.len;++i)
for(int j=1;j<=b.len;++j)
c[i+j-1]+=a[i]*b[j];
c.flatten(a.len+b.len);
return c;
}
Bigint operator/(Bigint a,int b){
Bigint c;
int len=a.len,x=0;
for(int i=len;i;--i){
c[i]=a[i]+x*10;
x=c[i]%b;
c[i]/=b;
}
c.flatten(len);
return c;
}
int operator%(Bigint a,int b){
Bigint c;
int len=a.len,x=0;
for(int i=len;i;--i){
c[i]=a[i]+x*10;
x=c[i]%b;
c[i]/=b;
}
return x;
}
bool operator>(Bigint a,Bigint b){
if(a.len!=b.len) return a.len>b.len;
int len=a.len;
for(int i=len;i;--i)
if(a[i]!=b[i])
return a[i]>b[i];
return 0;
}
bool operator<(Bigint a,Bigint b){
if(a.len!=b.len) return a.len<b.len;
int len=a.len;
for(int i=len;i;--i)
if(a[i]!=b[i])
return a[i]<b[i];
return 0;
}
bool operator>=(Bigint a,Bigint b){
if(a.len!=b.len) return a.len>b.len;
int len=a.len;
for(int i=len;i;--i)
if(a[i]!=b[i])
return a[i]>b[i];
return 1;
}
bool operator<=(Bigint a,Bigint b){
if(a.len!=b.len) return a.len<b.len;
int len=a.len;
for(int i=len;i;--i)
if(a[i]!=b[i])
return a[i]<b[i];
return 1;
}
int find(Bigint a,int b){
int c=0;
int len=a.len;
for(int i=1;i<=len;++i)
c+=a[i]==b;
return c;
}
Bigint abs(Bigint a){
Bigint b=a;
b.op=1;
return b;
}
Bigint opp(Bigint a){
Bigint b=a;
b.op=-b.op;
return b;
}
Bigint add(Bigint a,Bigint b){
Bigint c;
Bigint d=abs(a),e=abs(b);
if(a.op==b.op) c=d+e,c.op=a.op;
else if(d>e) c=d-e,c.op=a.op;
else c=e-d,c.op=b.op;
return c;
}
Bigint copy(Bigint a,int p,int t){
Bigint b;
for(int i=t;i>=p;--i) b[i]=a[i];
for(int i=p-1;i;--i) b[i]=0;
b.flatten(t);
return b;
}
Bigint div(Bigint a,Bigint b){
Bigint c;
for(int i=a.len;i;--i){
Bigint d(0);
d=copy(a,i,a.len);
while(a>=d) ++c[i],a=a-d;
}
c.flatten(a.len-b.len+1);
return c;
}
Bigint mod(Bigint a,Bigint b){
Bigint c;
for(int i=a.len;i;--i){
Bigint d(0);
d=copy(a,i,a.len);
while(a>=d) ++c[i],a=a-d;
}
a.flatten(b.len);
return a;
}
int main(){
a.scan(),b.scan();
c=div(a,b);
c.print();
c=mod(a,b);
c.print();
return 0;
}
可能是在b.scan()
后面,div
前面。
在线等......