!!萌新求助!!
查看原帖
!!萌新求助!!
404249
yyhde3301楼主2021/7/13 14:11

萌新求助 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;
}
2021/7/13 14:11
加载中...