高精度

以前一直偷懒用的封装好的或者py。。。
现在依旧很懒Orz
有高精加,高精减,高精乘低精,高精除低精,比大小,输入输出

struct Big{
	int s[10005];int len;
	Big(){memset(s,0,sizeof s);len=0;}
	void input() {
		scanf("%s",tp);
		len=strlen(tp);
		for(int i=0;i<len/2;i++) swap(tp[i],tp[len-i-1]);
		for(int i=0;i<len;i++) s[i]=tp[i]-'0';
	}
	Big operator - (const Big &rhs) const {
		Big ans;
		ans.len=max(len,rhs.len);
		int jian=0,cnt=0;
		for(int i=0;i<ans.len;i++) {
			ans.s[i]=s[i]-rhs.s[i]-jian;
			while(ans.s[i]<0) ans.s[i]+=10,cnt++;
			jian=cnt;
			cnt=0;
		}
		while(ans.s[ans.len-1]==0&&ans.len) ans.len--;
		return ans;
	}
	bool operator < (const Big &rhs) const {
		if(len>rhs.len) return 0;
		else if(len<rhs.len) return 1;
		for(int i=len-1;~i;i--) if(s[i]<rhs.s[i])return 1;
        else if(s[i]>rhs.s[i]) return 0;
		return 0;
	}
	void print() {
		for(int i=len-1;~i;i--) printf("%d",s[i]);
		putchar(' ');
	}
	Big operator / (const int &rhs) const {
		Big ans;
		int tui=0;
		ans.len=len;
		for(int i=len-1;~i;i--) {
			ans.s[i]=s[i]+tui;
			tui=(ans.s[i]%rhs)*10;
			ans.s[i]/=rhs;
		}
		while(ans.s[ans.len-1]==0&&ans.len>1) ans.len--;
		return ans;
	}
	Big operator * (const int &rhs) const{
		int jin=0;
		Big ans;
		ans.len=len;
		for(int i=0;i<len;i++) {
			ans.s[i]=s[i]*rhs;
			ans.s[i]+=jin;
			jin=(ans.s[i]/10);
			ans.s[i]%=10;
		}
		while(jin) ans.s[ans.len++]=jin%10,jin/=10;
		return ans;
	}
	bool operator != (const Big &rhs) const {
		if(len!=rhs.len) return 1;
		for(int i=0;i<len;i++) if(s[i]!=rhs.s[i]) return 1;
		return 0;
	} 
};
posted @ 2018-11-06 17:33  SWHsz  阅读(296)  评论(1编辑  收藏  举报