高精度加减乘

高精度加减乘

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
string add(string a,string b) {
    
    
	string ans;
	int na[110],nb[110];
	memset(na,0,sizeof(na));
	memset(nb,0,sizeof(nb));
	int la=a.size();
	int lb=b.size();
	for(int i=0; i<la; i++) {
    
    
		na[la-1-i]=a[i]-'0';
	}
	for(int i=0; i<lb; i++) {
    
    
		nb[lb-1-i]=b[i]-'0';
	}
	int lmax=max(la,lb);
	for(int i=0; i<lmax; i++) {
    
    
		na[i]+=nb[i];
		na[i+1]+=na[i]/10;
		na[i]%=10;
	}
	if(na[lmax]) lmax++;
	for(int i=lmax-1; i>=0; i--) ans+=na[i]+'0';
	return ans;
}
string Minus(string a,string b) {
    
    
	string ans;
	int na[110],nb[110];
	memset(na,0,sizeof(na));
	memset(nb,0,sizeof(nb));
	int la=a.size(),lb=b.size();
	for(int i=0; i<la; i++) {
    
    
		na[la-1-i]=a[i]-'0';
	}
	for(int i=0; i<lb; i++) {
    
    
		nb[lb-1-i]=b[i]-'0';
	}
	int lmax=max(la,lb);
	for(int i=0; i<lmax; i++) {
    
    
		na[i]-=nb[i];
		if(na[i]<0) na[i]+=10,na[i+1]--;
	}
	while(!na[--lmax]&&lmax>0) ;
	lmax++;
	for(int i=lmax-1; i>=0; i--) ans+=na[i]+'0';
	return ans;

}
int L=110;
string mul(string a,string b) {
    
    
	string s;
	int na[L],nb[L],nc[L],La=a.size(),Lb=b.size();
	fill(na,na+L,0);
	fill(nb,nb+L,0);
	fill(nc,nc+L,0);
	for(int i=La-1; i>=0; i--) na[La-i]=a[i]-'0';
	for(int i=Lb-1; i>=0; i--) nb[Lb-i]=b[i]-'0';
	for(int i=1; i<=La; i++)
		for(int j=1; j<=Lb; j++)
			nc[i+j-1]+=na[i]*nb[j];
	for(int i=1; i<=La+Lb; i++)
		nc[i+1]+=nc[i]/10,nc[i]%=10;
	if(nc[La+Lb]) s+=nc[La+Lb]+'0';
	for(int i=La+Lb-1; i>=1; i--)
		s+=nc[i]+'0';
	return s;
}
int main() {
    
    
	string a,b;
	cin>>a>>b;
	cout<<"ADD  "<<add(a,b)<<endl;
	cout<<"MINUS  "<<Minus(a,b)<<endl;
	cout<<"MUL  "<<mul(a,b)<<endl;
}

Guess you like

Origin blog.csdn.net/weixin_45446715/article/details/120908435