自用高精低精模板

 加法高精对低精

vector<int> add(vector<int > A,int b){
	vector<int >c;
	for(int i=A.size()-1;i>=0||b;--i){
		if(i<A.size()) b+=A[i];
		c.push_back(b%10);
		b/=10;
	}
	reverse(c.begin(),c.end());
	return c;
}

加法高精对高精

vector<int> add(vector<int> A,vector<int> B){
	vector<int>C;
	reverse(A.begin(),A.end());
	reverse(B.begin(),B.end());
	for(int i=0,t=0;i<A.size()||i<B.size()||t;++i){
		int a=(i<A.size())?A[i]:0,b=(i<B.size())?B[i]:0;
		t+=a+b;
		C.push_back(t%10);
		t/=10;
	}
	reverse(C.begin(),C.end());
	return C;
}

减法高精对低精

vector<int> sub(vector<int> A,int b){
	vector<int> C;
	A[A.size()-1]-=b;
	for(int i=A.size()-1;i>=0;--i){
		while(A[i]<0){
			A[i]+=10;
			A[i-1] -=1;
		}
		C.push_back(A[i]);
	}
	while(C.size()>1&&C.back()==0) C.pop_back();
	reverse(C.begin(),C.end());
	return C;
}

减法高精度对高精度

vector<int> sub(vector<int> A,vector<int> B){
	vector<int>C;
	reverse(A.begin(),A.end());
	reverse(B.begin(),B.end());
	for(int i=0;i<A.size()||i<B.size();++i){
		int a=(i<A.size())?A[i]:0,b=(i<B.size())?B[i]:0;
		if(a<b) a+=10,A[i+1]-=1;
		C.push_back(a-b);
	}
    while(C.size()>1&&C.back()==0) C.pop_back();
	reverse(C.begin(),C.end());
	return C;
}

乘法高精度对低精度

vector<int> div(vector<int > A,int b,int &r){
	vector<int>c;
	r = 0;
	for(int i=0;i<A.size();++i){
		r = r*10+A[i];
		c.push_back(r/b);
		r%=b;
	}
	while(c.size()>1&&c.front() == 0) c.erase(c.begin(),c.begin()+1);
	return c;
}

乘法高精度对高精度

vector<int> mul(vector<int> A,vector<int> B){
	vector<int>C((A.size()+1)*(B.size()+1),0);
	reverse(A.begin(),A.end());
	reverse(B.begin(),B.end());
	for(int i=0,as=0;i<A.size();++i){
		for(int j=0;j<B.size()||as!=0;++j){
			C[i+j]+=A[i]*B[j]+as;
			as=C[i+j]/10;
			C[i+j]%=10;
		}
	}
	while(C.size()>1&&C.back()==0) C.pop_back();
	reverse(C.begin(),C.end());
	return C;
}

除法高精度对低精度

vector<int> div(vector<int > A,int b,int &r){
	vector<int>c;
	r = 0;
	for(int i=0;i<A.size();++i){
		r = r*10+A[i];
		c.push_back(r/b);
		r%=b;
	}
	while(c.size()>1&&c.front() == 0) c.erase(c.begin(),c.begin()+1);
	return c;
}

除法高精度对高精度

bool judge(vector<int> A,vector<int> B){
	if(A.size()>B.size()) return 1;
	if(A.size()<B.size()) return 0;
	for(int i=0;i<A.size();++i){
		if(A[i]>B[i]) return 1;
		if(A[i]<B[i]) return 0;
	}
	return 1;
}
vector<int> div(vector<int>&A,vector<int>B){
	vector<int>C,D(1,1);
	while(judge(A,B)){
		A=sub(A,B);
		C=add(C,D); 
	}
	return C;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值