高精度(还有其它的以后再补充)

  只是实现了+,*,以及除以一个整数,其它遇到了就再补充。

  

struct BigData{
	int s[105];
	int len;
	BigData(int x){
		Mem(s, 0);
		len = 0;
		while(x){
			s[len] = x % 10;
			x /= 10;
			len ++;
		}
	}
	BigData(): len(0){
		Mem(s, 0);
	};
	BigData operator / (int x){
		BigData ans;
		int cur = 0;
		for(int i = len - 1; i >= 0; i --){
			cur = cur * 10 + s[i];
			if( cur < x && ans.len != 0 ){
				ans.s[ans.len++] = 0;
			}
			if( cur >= x ){
				ans.s[ans.len++] = cur / x;
				cur %= x;
			}
		}
		if( cur != 0 ){
			printf("除法error\n");
		}
		for(int i = 0; i < ans.len / 2; i ++){
			int t = ans.s[i];
			ans.s[i] = ans.s[ans.len-i-1];
			ans.s[ans.len-i-1] = t;
		}
		return ans;
	}
	BigData operator + ( BigData a){
		BigData ans;
		for(int i = 0; i < len || i < a.len; i ++){
			ans.s[i] = s[i] + a.s[i];
		}
		for(int i = 0; i < 105; i ++){
			if( ans.s[i] != 0 )
				ans.len = i + 1;
			ans.s[i+1] += ans.s[i] / 10;
			ans.s[i] %= 10; 
		}
		return ans;
	}
	BigData operator * ( BigData a){
		BigData ans;
		for(int i = 0; i < len; i ++){
			for(int j = 0; j < a.len; j ++){
				ans.s[i+j] += s[i] * a.s[j];
			}
		}
		for(int i = 0; i < 105; i ++){
			if( ans.s[i] != 0 )
				ans.len = i + 1;
			ans.s[i+1] += ans.s[i] / 10;
			ans.s[i] %= 10; 
		}
		return ans;
	}
	void operator = (BigData a){
		len = a.len;
		for(int i = 0; i < 105; i ++)
			s[i] = a.s[i];
	}
	void print(){
		for(int i = len - 1; i >= 0; i --){
			printf("%d",s[i]);
		}
		if( len == 0 ){
			printf("0");
		}
		printf("\n");
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值