RT,不知道哪里挂了。
球球大佬帮看看
#include<bits/stdc++.h>
using namespace std;
struct python{
static const int si=1e4+10;
static const int base=1e4;
static const int bitn=4;
int q[si];
python(){
for(register int i=1;i<=si-10;++i){
q[i]=0;
}
q[0]=1;
}
void print(){
printf("%d",q[q[0]]);
for(register int i=q[0]-1;i;--i){
printf("%0*d",bitn,q[i]);
}
}
python & fix(){
for(register int i=1;i<=q[0];++i){
if(q[i]<0) q[i+1]--,q[i]+=base;
q[i+1]+=q[i]/base,q[i]%=base;
if(q[i+1]) q[0]=max(q[0],i+1);
}
while(q[0]>1 && q[q[0]]==0) q[0]--;
return *this;
}
python & operator = (string &b){
int l=b.size();
int x=0,t=1,p=0;
for(register int i=l-1;i>=0;--i){
x=t*(b[i]-'0')+x;
t*=10,++p;
if(p==bitn) q[q[0]++]=x,x=p=0,t=1;
}
if(x) q[q[0]]=x;
return fix();
}
bool operator < (const python b)const{
if(q[0]!=b.q[0]) return q[0]<b.q[0];
for(register int i=q[0];i>=1;--i){
if(q[i]!=b.q[i]) return q[i]<b.q[i];
}return false;
}
bool operator <= (const python b)const{
if(q[0]!=b.q[0]) return q[0]<b.q[0];
for(register int i=q[0];i>=1;--i){
if(q[i]!=b.q[i]) return q[i]<b.q[i];
}return true;
}
bool operator > (const python b)const{
return b< *this;
}
bool operator >= (const python b)const{
return b<= *this;
}
bool operator == (const python b)const{
return !(*this<b) && !(*this>b);
}
bool operator != (const python b)const{
return !(*this==b);
}
python operator + (const python b)const{
python c;
c.q[0]=max(q[0],b.q[0]);
for(register int i=1;i<=c.q[0];++i){
c.q[i]=q[i]+b.q[i];
}
return c.fix();
}
python operator + (const int &b)const{
python c=*this;
c.q[1]+=b;
return c.fix();
}
python operator - (const python b)const{
if(*this<b) puts("-1073741819 fool, check your code!");
python c;
c.q[0]=max(q[0],b.q[0]);
for(register int i=1;i<=c.q[0];++i){
c.q[i]=q[i]-b.q[i];
}return c.fix();
}
python operator * (const python b)const{
python c;
c.q[0]=q[0]+b.q[0]-1;
for(register int i=1;i<=q[0];i++){
for(register int j=1;j<=b.q[0];j++){
c.q[i+j-1]+=q[i]*b.q[j];
}
}return c.fix();
}
python operator * (const long long & b)const{
python c=*this;
for(register int i=1;i<=q[0];i++){
c.q[i]*=b;
}return c.fix();
}
python operator / (const python b)const{
python c,rest;
for(register int i=q[0];i>=1;--i){
rest=rest*base+q[i]; // perhaps you should add long long
//while(rest>=b) c.q[i]++,rest=rest-b;
int l=0,r=base,ans=0;
while(l<=r){
int mid=(l+r)/2;
if(rest>=b*mid) ans=mid,l=mid+1;
else r=mid-1;
}
c.q[i]+=ans,rest=rest-b*ans;
}return c.fix();
}
python operator % (const python b)const{
python rest;
rest=*this-(*this)/b*b;
return rest.fix();
}
};
int main(){
python a,b,aa,bb;
string s;cin>>s;
a=aa=s;cin>>s;b=bb=s;
(a+b).print();puts("");
if(a<b) putchar('-'),(bb-aa).print();
else (a-b).print();
puts("");
(a*b).print();puts("");
(a/b).print();puts("");
(a%b).print();puts("");
return 0;
}