谁能告诉我为什么输入没输入完,三个点WA。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<deque>
#define dd double
#define ll long long
#define N 10010
using namespace std;
struct bignum{
ll n[N>>2];
bool op=0;//1 +,0 -
const ll mod=1e8;
void out()
{
if(!op&&(n[1]||n[0]!=1)) cout<<"-",op=0;
printf("%lld",n[n[0]]);
for(int i=n[0]-1;i>0;i--) printf("%08lld",n[i]);
cout<<endl;
}//over
void ry()
{
for(int i=n[0];i;--i)
{
if((n[i]&1)&&i>1) n[i-1]+=mod;
n[i]>>=1;
}
if(!n[n[0]]&&n[0]>1) --n[0];
}
void ly()
{
++n[0];
for(int i=1;i<=n[0];i++)
{
n[i]<<=1;
if(n[i-1]>=mod) n[i-1]-=mod,++n[i];
}
if(!n[n[0]]&&n[0]>1) --n[0];
}
void cpy(bignum a)
{
for(int i=a.n[0];i>n[0];i--) n[i]=0;
for(int i=0;i<=a.n[0];i++) n[i]=a.n[i];
op=a.op;
}
int cmp(bignum a)
{
if(n[0]>a.n[0]) return 1;
if(n[0]<a.n[0]) return -1;
for(int i=n[0];i;i--)
{
if(n[i]>a.n[i]) return 1;
if(n[i]<a.n[i]) return -1;
}
return 0;
}
void init()
{
string ss;
cin>>ss;
if(ss[0]=='-') ss[0]='0',op=0;
int len=ss.length();
for(int i=len-1;i>=0;i-=8)
{
ll pw=1;
for(int j=i;j>i-8&&j>=0;j--)
{
n[n[0]]+=(ss[j]^48)*pw;
pw=(pw<<3)+(pw<<1);
}
++n[0];
}
n[0]--;
}
void sp(bignum& b)
{
bignum c;
c.cpy(*this);
this->cpy(b);
b.cpy(c);
}
bignum ()
{
memset(n,0,sizeof(n));
op=1;
n[0]=1;
}
bignum operator + (bignum b)// a>0 b>0
{
bignum c;
if(op==b.op) c.op=op;
else
{
if(op==1)
{
b.op=1;
return *this-b;
}
else
{
op=1;
return b-*this;
}
}
c.n[0]=max(n[0],b.n[0])+1;
for(int i=1;i<=c.n[0];i++)
{
c.n[i]+=n[i]+b.n[i];
if(c.n[i]>=mod) c.n[i]-=mod,c.n[i+1]++;
}
while(!c.n[c.n[0]]&&c.n[0]>1) c.n[0]--;
return c;
}
bignum operator - (bignum b) //a>b>0
{
bignum c,d;
d.cpy(*this);
if(op!=b.op)
{
b.op^=1;
return *this+b;
}
else c.op=op;
if(this->cmp(b)==-1)
{
this->sp(b);
c.op^=1;
}
c.n[0]=max(n[0],b.n[0]);
for(int i=1;i<=c.n[0];i++)
{
c.n[i]+=n[i]-b.n[i];
if(c.n[i]<0) c.n[i]+=mod,c.n[i+1]--;
}
while(!c.n[c.n[0]]&&c.n[0]>1) c.n[0]--;
this->cpy(d);
return c;
}
bignum operator * (bignum b)
{
bignum c;
c.n[0]=n[0]+b.n[0];
for(int i=1;i<=n[0];i++)
{
for(int j=1;j<=b.n[0];j++)
{
c.n[i+j-1]+=n[i]*b.n[j];
if(c.n[i+j-1]>=mod) c.n[i+j]+=c.n[i+j-1]/mod,c.n[i+j-1]%=mod;
}
}
while(!c.n[c.n[0]]&&c.n[0]>1) c.n[0]--;
if(op!=b.op) c.op=0;
return c;
}
bignum operator / (bignum b)
{
bignum cp,lt,c,d;
d.cpy(*this);
if(op!=b.op) lt.op=0;
cp.n[1]=1;
while(this->cmp(b)!=-1) b.ly(),cp.ly();
while(cp.n[1]||cp.n[0]>1)
{
if(this->cmp(b)!=-1)
{
c.cpy(*this-b);
this->cpy(c);
c.cpy(lt+cp);
lt.cpy(c);
}
b.ry();
cp.ry();
}
lt.out();
lt.cpy(*this);
this->cpy(d);
return lt;
}
};
int main()
{
bignum a,b,c;
a.init();
b.init();
cout<<endl;
cout<<endl;
c.cpy(a+b);
c.out();
c.cpy(a-b);
c.out();
c.cpy(a*b);
c.out();
c.cpy(a/b);
c.out();
}