萌新求助 2 5 6 9个点Too short on line 4
#include<bits/stdc++.h>
#define R register
using namespace std;
struct hpn{
int f,l;
int b[20000+10];//when multiply len<<=1 so 20000 instead of 10000
hpn(){
f=1,l=0;
memset(b,0,sizeof(b));
}
hpn(string s){
if(s[0]=='-')f=-1,s.erase(0,1);
l=s.length();f=1;
for(R int i=1;i<=l;++i)
b[i]=s[l-i]-'0';
}
hpn(int x){
if(x<0)f=-1,x=-x;
l=log(x)/log(10)+1;f=1;
for(R int i=1;i<=l;++i)
b[i]=x%10,
x/=10;
}
};
bool operator<(hpn a,hpn b){
if(a.f<b.f)return 1;
if(a.f>b.f)return 0;
if(a.l<b.l)return 1;
if(a.l>b.l)return 0;
for(R int i=a.l;i>=1;--i){
if(a.b[i]<b.b[i]&&a.f>0)return 1;
if(a.b[i]>b.b[i]&&a.f>0)return 0;
if(a.b[i]<b.b[i]&&a.f<0)return 0;
if(a.b[i]>b.b[i]&&a.f<0)return 1;
}
return 0;
}
bool operator==(hpn a,hpn b){
if(a.f!=b.f)return 0;//-0 ? +0
if(a.l!=b.l)return 0;
for(int i=a.l;i>=1;--i)
if(a.b[i]!=b.b[i])return 0;
return 1;
}
hpn operator+(hpn a,hpn b){
R hpn c;
c.l=max(a.l,b.l);//sign?
for(R int i=1;i<=c.l;++i)
c.b[i]=a.b[i]+b.b[i];
for(R int i=1;i<=c.l;++i)
if(c.b[i]>9)
c.b[i+1]+=1,
c.b[i]-=10,
c.l=max(c.l,i+1);
return c;
}
hpn operator-(hpn a,hpn b){
R hpn c;
c.l=max(a.l,b.l);
if(a<b)c.f=-1,swap(a,b);
for(R int i=1;i<=c.l;++i)
c.b[i]=a.b[i]-b.b[i];
for(R int i=1;i<=c.l;++i)
if(c.b[i]<0)
c.b[i+1]-=1,
c.b[i]+=10;
while(c.l&&!c.b[c.l])--c.l;
return c;
}
hpn operator*(hpn a,hpn b){
R hpn c;
c.l=a.l+b.l+1;//sign?
for(R int i=1;i<=a.l;++i)
for(R int j=1;j<=b.l;++j)
c.b[i+j-1]+=a.b[i]*b.b[j];
for(R int i=1;i<=c.l;++i)
if(c.b[i]>9)
c.b[i+1]+=c.b[i]/10,
c.b[i]%=10,
c.l=max(c.l,i+1);
while(c.l&&!c.b[c.l])--c.l;
return c;
}
hpn operator<<(hpn a,int l){//equal to * pow(10,l)
R hpn b;
b.l=a.l+l;//sign?
for(R int i=1;i<=a.l;++i)
b.b[i+l]=a.b[i];
return b;
}
void print(hpn);
hpn operator/(hpn a,hpn b){
R hpn c,d;
c.l=a.l-b.l+1;
for(R int i=c.l;i>=1;--i){
d=b<<(i-1);
while(!(a<d)){// a>=d
++c.b[i];
if(a==d)break;
a=a-d;
}
}
while(c.l&&!c.b[c.l])--c.l;
return c;
}
hpn operator%(hpn a,hpn b){
R hpn c,d;
c.l=a.l-b.l+1;
for(R int i=c.l;i>=1;--i){
d=b<<(i-1);
while(!(a<d)){// a>=d
++c.b[i];
a=a-d;
}
}
return a;
}
void print(hpn a){
if(a.l==0)
{printf("0\n");return;}
if(a.f==-1)putchar('-');
for(int i=a.l;i>=1;--i)
putchar(a.b[i]+'0');
putchar('\n');
}
string sa,sb;
hpn a,b,c;
int main(){
cin>>sa>>sb;
a=hpn(sa);;
b=hpn(sb);
print(a+b);
print(a-b);
print(a*b);
print(a/b);
print(a%b);
return 0;
}