在你古,高精为什么不能这么写?
查看原帖
在你古,高精为什么不能这么写?
182196
阿豆·克锐死停楼主2020/10/1 10:27

高精加

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct Ints{
	int f;
	long long num[111];
	void clr(){
		f=0;
		for(int i=0;i<=110;i++) num[i]=0;
		return ;
	}
	bool absmlr(const Ints &bb){
		for(int i=1;i<=110;i++){
				if(num[i]<bb.num[i]){
					return 1;
				}
				if(num[i]>bb.num[i]){
					return 0;
				}
			}
		return 0;
	}
	
	friend Ints operator+ (const Ints &aa,const Ints &bb){
		const int Intsmod=100000;
		Ints cc;
		Ints aaa=aa;
		Ints bbb=bb;
		cc.num[110]=0;
		//cc.clr();
		if(aa.f==bb.f){
			for(int i=110;i>=1;i--){
				cc.num[i-1]=(aa.num[i]+bb.num[i])/Intsmod;
				cc.num[i]+=(aa.num[i]+bb.num[i])%Intsmod;
			}
			cc.f=bb.f;	
		}else{
			if(aaa.absmlr(bbb)){
				for(int i=110;i>=1;i--){
				cc.num[i]=(bb.num[i]-aa.num[i]);
				}
				for(int i=110;i>=1;i--){
					if(cc.num[i]<0){
						cc.num[i]+=Intsmod,cc.num[i-1]--;
					}
				}
				cc.f=bb.f;
			}else if(aa==bb){
				cc.clr();
			}else{
				for(int i=110;i>=1;i--){
				cc.num[i]=(aa.num[i]-bb.num[i]);
				}
				for(int i=110;i>=1;i--){
					if(cc.num[i]<0){
						cc.num[i]+=Intsmod,cc.num[i-1]--;
					}
				}
				cc.f=aa.f;
			}
		}
		cc.osc();
		return cc;
	}
	friend bool operator== (const Ints aa,const Ints bb){
		if(aa.f!=bb.f)
		return 0;
		for(int i=1;i<=110;i++){
			if(aa.num[i]^bb.num[i]){
				return 0;
			}
		}
		return 1;
	}
	void print(){
		const int Intsmod=100000;
		if(f){
			putchar('-');
		}
		bool bbb=0;
		for(int i=1;i<=110;i++){
			if(bbb){
				printf("%05lld",num[i]);
			}
			if(num[i]&&!bbb){
				bbb=1;
				printf("%lld",num[i]);
			}
		}
		if(!bbb) putchar('0');
		putchar('\n');
	}
	void read(){
		const int Intsmod=100000;
		f=0;
		const int tns[]={1,10,100,1000,10000};
		char sa[550];
		memset(sa,0,sizeof sa);
		int ki;
		for(ki=1;;){
			sa[ki]=getchar();
			if(sa[ki]=='-'){
			f=1;
			continue;
			}
			if(sa[ki]<'0'||sa[ki]>'9'){
				ki--;
				break;
			}
			ki++;
		}
		int la=ki;
		int jj=la,ii=110,js=0;
		while(jj>=1&&ii>=1){
			num[ii]+=tns[js]*(sa[jj]-'0');
			jj--;
			js++;
			if(js==5) js=0,ii--;
		}
	}
	void osc(){
		for(int i=1;i<=110;i++){
			if(i!=0)
			break;
			if(i==110)
			f=0;
		}
		return ;
	}
};
Ints a,b;
int main(){
	a.read();
	b.read();
	a=a+b;
	a.print();
	//b.print();
	return 0;
}

本地

但是在lgIDE上完全爆炸

2020/10/1 10:27
加载中...