关于vector的高精度乘法与除法等操作

高精度

乘法

vector<int> multi(vector<int> a,vector<int> s){
	int t=a.size();
	vector<int> ans(t,0);
	t=0;
	int ta,ts;
	for(int i=0;i<ans.size();i++){
		if(a[i]!=0)ta=i;
		if(s[i]!=0)ts=i;
	}
	for(int j=0;j<=ts;j++){
		for(int i=0;i<=ta&&i+j<ans.size();i++){
			ans[j+i]+=(s[j]*a[i]);
		}
	}
	for(int i=0;i<ans.size();i++){
		ans[i]+=t;
		t=ans[i]/10;
		ans[i]%=10;
	}
	return ans;
}

除法

vector<int> divide(vector<int> a,int s){
	string ans;
	int t=0;
	int p=0;
	int flag=0;
	for(int i=a.size()-1;i>=0;i--){
		t=t*10+a[i];
		char o='0'+t/s;
		if(o!='0'){
			flag=1;
		}
		if(flag==1){
			ans+=o;
		}
		t%=s;
	}
	reverse(all(ans));
	p=a.size();
	vector<int>d(p);
	for(int i=0;i<ans.size();i++){
		d[i]=ans[i]-'0';
	}
	return d;
	
}

取最大值

vector<int> maxl(vector<int> a,vector<int> b){
	int ta,tb;
	ta=tb=0;
	for(int i=0;i<a.size();i++){
		if(a[i]!=0)ta=i;
		if(b[i]!=0)tb=i;
	}
	int flag=0;
	if(ta>tb){
		return a;
	}
	else{
		if(ta<tb)return b;
		else{
			for(int i=ta;i>=0;i--){
				if(a[i]==b[i]){
					continue;
				}
				else{
					if(a[i]>b[i])return a;
					else return b;

				}
			}
			return a;
		}
	}
}

int 转vector

vector<int> to_vector(int s,int n){
	vector<int>a(n);
	int i=0;
	while(s){
		a[i]=s%10;
		i++;
		s/=10;
	}
	return a;
}

将倒序的高精度vector输出

void printvt(vector<int>a){
	int flag1=0;
	for(int i=0;i<a.size();i++){
		if(a[i]!=0)flag1=i;
	}
	for(int i=flag1;i>=0;i--){
		cout<<a[i];
	}
}
posted @ 2025-03-04 15:56  C微  阅读(23)  评论(0)    收藏  举报