C++高精度加减乘算法

高精度加法:

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
string s1,s2;
int la,lb,lc;
int a[505],b[505],c[505];
void strtoint(string str,int tar[]){
	for(int i=0;i<str.size();i++){
		tar[str.size()-i]=str[i]-'0';
	}
}
int main(){
    ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>s1>>s2; 
	strtoint(s1,a); strtoint(s2,b);
	la=s1.size(); lb=s2.size(); lc=max(la,lb)+1;
	for(int i=1;i<=lc;i++){
		c[i]+=a[i]+b[i];
		c[i+1]+=c[i]/10;
		c[i]%=10;
	} 
	bool f=0;
	for(int i=lc;i>=1;i--){
		if(c[i]!=0) f=1;
		if(f) cout<<c[i]; 
	}
	if(!f) cout<<0;
	return 0;
}

高精度减法:

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int a[N],b[N],c[N];
int la,lb,lc;
bool cmp(int a[],int b[]){
	if(la!=lb) return la>lb;
	for(int i=la-1;i>=0;i--){
		if(a[i]!=b[i]) return a[i]>b[i];
	}
	return 1;
}
void sub(int a[],int b[],int c[]){
	for(int i=0;i<lc;i++){
		if(a[i]<b[i]){
			a[i+1]--;
			a[i]+=10;
		}
		c[i]=a[i]-b[i];
	}
	while(lc&&c[lc]==0) lc--;
}
int main(){
	string s1,s2;
	cin>>s1>>s2;
	la=s1.size(),lb=s2.size(),lc=max(la,lb);
	for(int i=la-1;i>=0;i--) a[la-1-i]=s1[i]-'0';
	for(int i=lb-1;i>=0;i--) b[lb-1-i]=s2[i]-'0';
	if(!cmp(a,b)){
		swap(a,b);
		cout<<"-";
	}
	sub(a,b,c);
	for(int i=lc;i>=0;i--) cout<<c[i];
	return 0;
}

高精度乘法:

#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int a[N],b[N],c[N];
int la,lb,lc;
void mul(int a[],int b[],int c[]){
	for(int i=0;i<la;i++){
		for(int j=0;j<lb;j++){
			c[i+j]+=a[i]*b[j];
			c[i+j+1]+=c[i+j]/10;
			c[i+j]%=10;
		}
	}
	while(lc&&c[lc]==0) lc--;
}
int main(){
	string s1,s2;
	cin>>s1>>s2;
	la=s1.size(),lb=s2.size(),lc=la+lb;
	for(int i=la-1;i>=0;i--) a[la-1-i]=s1[i]-'0';
	for(int i=lb-1;i>=0;i--) b[lb-1-i]=s2[i]-'0';
	mul(a,b,c);
	for(int i=lc;i>=0;i--) cout<<c[i];
	return 0;
}
posted @ 2025-02-04 21:17  2789617221guo  阅读(14)  评论(0)    收藏  举报