高精重载,求找错
  • 板块学术版
  • 楼主zcy942
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/9/26 21:56
  • 上次更新2023/11/2 17:56:38
查看原帖
高精重载,求找错
490651
zcy942楼主2023/9/26 21:56

rt,手打了一个高精重载模板,不知道是否有误,求大佬帮忙找错thx

没写除法,且还待完善

struct hp{
	int k,Size;
	hp(){memset(a,0,sizeof(a)); k=1; Size=1; return;}
	int a[100010];
	inline hp operator*(const hp &p) const{
		hp t;
		for(int i=1;i<=Size;i++) for(int j=1;j<=Size;j++) t.a[i+j-1]+=a[i]*p.a[j];
		for(int i=1;i<=Size+p.Size;i++) t.a[i+1]+=t.a[i]/10,t.a[i]%=10;
		int s=100000; while(!t.a[s]) s--; t.Size=s;
		return t;
	}
	inline hp operator*(const int &p){
		hp t;
		for(int i=1;i<=Size;i++) t.a[i]=a[i]*p;
		for(int i=1;i<=Size+10;i++) t.a[i+1]+=t.a[i]/10,t.a[i]%=10;
		int s=100000; while(!t.a[s]) s--; t.Size=s;
		return t;
	}
	inline void operator*=(const hp &p){
		hp t;
		for(int i=1;i<=Size;i++) for(int j=1;j<=Size;j++) t.a[i+j-1]+=a[i]*p.a[j];
		for(int i=1;i<=Size+p.Size;i++) t.a[i+1]+=t.a[i]/10,t.a[i]%=10;
		int s=100000; while(!t.a[s]) s--; Size=s;
		for(int i=1;i<=Size;i++) a[i]=t.a[i];
	}
	inline void operator*=(const int &p){
		hp t;
		for(int i=1;i<=Size;i++) t.a[i]=a[i]*p;
		for(int i=1;i<=Size+10;i++) t.a[i+1]+=t.a[i]/10,t.a[i]%=10;
		int s=100000; while(!t.a[s]) s--; Size=s;
		for(int i=1;i<=Size;i++) a[i]=t.a[i];
	}
	inline hp operator+(const hp &p){
		hp t;
		for(int i=1;i<=Size;i++) t.a[i]=a[i];
		Size=max(p.Size,Size),t.Size=Size;
		for(int i=1;i<=Size;i++) t.a[i]+=p.a[i],t.a[i+1]+=t.a[i]/10,t.a[i]%=10;
		if(t.a[t.Size+1]) t.Size++;
		return t;
	}
	inline hp operator+(const int &p){
		hp t;
		for(int i=1;i<=Size;i++) t.a[i]=a[i];
		t.a[1]+=p,t.Size=Size;
		for(int i=1;i<=Size;i++) t.a[i+1]+=t.a[i]/10,t.a[i]%=10;
		while(t.a[t.Size+1]) t.Size++;
		return t;
	}
	inline void operator+=(const int &p){
		a[1]+=p;
		for(int i=1;i<=Size+10;i++) a[i+1]+=a[i]/10,a[i]%=10;
		while(a[Size+1]) Size++;
	}
	inline void operator+=(const hp &p){
		for(int i=1;i<=Size+p.Size;i++) a[i]+=p.a[i],a[i+1]+=a[i]/10,a[i]%=10;
		while(a[Size+1]) Size++;
	}
	inline int operator<(const hp &p) const{
		for(int i=Size;i;i--){
			if(a[i]>p.a[i]) return 0;
			if(a[i]<p.a[i]) return 1;
		}
		return 0;
	}
	inline hp operator-(const hp &p) const{
		hp t;
		for(int i=1;i<=Size;i++){
			t.a[i]=a[i]-p.a[i];
			if(t.a[i]<0) t.a[i]+=10,t.a[i+1]--;
		}
		return t;
	}
	inline void read(){
		char c;
		while((c=getchar())<'0' || c>'9');
		while(c>='0' && c<='9'){
			for(int i=Size;i>1;i--) a[i]=a[i-1];
			a[1]=c^48,c=getchar(),Size++;
		}
  	}
	inline void write(){
		int i=Size;
		while(i && !a[i]) i--;
		while(i) putchar(a[i--]+'0');
		return;
	}
};
2023/9/26 21:56
加载中...