大数模板

当成int直接用。

struct BigInt{
	const static int mod=10000;
	const static int DLEN=4;
	int a[100],len; //位数4*100
	BigInt()
	{   
		ms(a),len=1;
	}
	BigInt(int v)  
	{  
		ms(a),len=0;
		do{
		    a[len++]=v%mod,v/=mod;   
		}while(v);
	}  
	BigInt(const char *s)//串输入ss(s)
	{
		ms(a);
		int L=strlen(s);
		len=L/DLEN;
		if(L%DLEN) len++;
		int index=0;
		for(int i=L-1;i>=0;i-=DLEN){
			int t=0,k=i-DLEN+1;  
			if(k<0) k=0; 
			repi(j,k,i) t=t*10+s[j]-'0';
		    a[index++]=t;   
		}
	}
	BigInt operator +(const BigInt &b)const
	{
		BigInt res;
		res.len=max(len,b.len);   
		repi(i,0,res.len) res.a[i]=0; 
		repi(i,0,res.len-1){
			res.a[i]+=((i<len)?a[i]:0)+((i<b.len)?b.a[i]:0);
			res.a[i+1]+=res.a[i]/mod,res.a[i]%=mod; 
		}
		if(res.a[res.len]>0) res.len++;
		return res;
    }
    BigInt operator *(const BigInt &b)const  
	{   
		BigInt res;
	    repi(i,0,len-1){ 
	    	int up = 0;
			repi(j,0,b.len-1){
			    int temp=a[i]*b.a[j]+res.a[i+j]+up;   
			  	res.a[i+j]=temp%mod;
				up=temp/mod; 
			}    
			if(up!=0) res.a[i+b.len]=up;
		}   
		res.len=len+b.len;
		while(res.a[res.len-1]==0&&res.len>1) res.len--;
		return res; 
	}  
	void output()
	{   
		printf("%d",a[len-1]);
		repd(i,len-2,0) printf("%04d",a[i]);
		puts("");
	}
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值