C++ 高精度四则运算

Cpp 投稿 111600 0 评论

C++ 高精度四则运算

1.高精度

首先,需要3个数组,$a[ i]$  $b[i]$ 分别储存输入的$a,b$($a,b$以字符串读入)

最后,倒序输出即可

#include<bits/stdc++.h>
using namespace std;
int a[10000], b[10000], c[10000];//分别储存
string A, B;
int main(){	
	cin>>A>>B;
	int q=1, w=1;
	int len=max(A.size(), B.size());	
	for(int i=A.size()-1;i>=0;i--){
		a[q]=A[i]-'0';
		q++;
	}
	for(int i=B.size()-1;i>=0;i--){
		b[w]=B[i]-'0';
		w++;
	}//分别处理
	for(int i=1;i<=max(q,w);i++){
		c[i]+=a[i]+b[i];
		c[i+1]=c[i]/10;
		c[i]%=10;
	}//计算
	if(c[len+1]){
		len++;
	}
	for(int i=len;i>=1;i--){
		cout<<c[i];
	}//输出
	return 0;
}

1-2 高精度减法

按照减法规则模拟即可

#include<bits/stdc++.h>
using namespace std;
int A[100000], B[100000], C[100000];
string a, b;
int main(){
	cin>>a>>b;
	int q=1, w=1;
	if(a.size()<b.size()){
		swap(a, b);
		C[0]=-1;
	}else if(a.size()==b.size()){
		if(a<b){
			swap(a, b);
		    C[0]=-1;
		}
	}
	int len=a.size();
	for(int i=a.size()-1;i>=0;i--){
		A[q]=a[i]-'0';
		q++;
	}
	for(int i=b.size()-1;i>=0;i--){
		B[w]=b[i]-'0';
		w++;
	}
	for(int i=1;i<=len;i++){
		C[i]+=A[i]-B[i];
		if(C[i]<0){
			C[i+1]-=1;
			C[i]+=10;
		}
	}
	if(C[0]==-1){
		cout<<"-";
	}
	int count=0;
	for(int i=len;i>=1;i--){
		if(C[i]==0){
			count++;
		}
		if(count==len){
			cout<<0;
			return 0;
		}
	}
	for(int i=len;i>=1;i--){
		cout<<C[i];
	}
	return 0;
}

1-3 高精度乘法

其计算方法是
$$
c[i+j]=c[i+j]+A[i] * B[j]
$$
然后就是基操

#include<bits/stdc++.h>
using namespace std;
long long c[30000]={0};
long long A[10000], B[10000];
int main() {
	string a, b;
	cin>>a>>b;
	int q=0, w=0;
	for(int i=a.size()-1; i>=0; i--) {
		A[w]=a[i]-'0';
		w++;
	}
	for(int i=b.size()-1; i>=0; i--) {
		B[q]=b[i]-'0';
		q++;
	}
	for(int i=0; i<=w; i++) {
		for(int j=0; j<=q; j++) {
			c[i+j]+=A[i]*B[j];//计算贡献 
			c[i+j+1]+=c[i+j]/10;
			c[i+j]%=10;
		}
	}
	int m=a.size()+b.size();
	for(; !c[m]&&m>=1;) {
		m--;
	}
	for(int i=m; i>=0; i--) {
		cout<<c[i];
	}
	return 0;
}

1-4 高精度除法*

高精度$/$单精度

string mul(string x,string y) {
	int a[maxn],b[maxn],c[maxn];
	string ans;
	int lena=x.length(),lenb=y.length(),len=lena+lenb-1;
	for(int i=0; i<lena; i++) a[lena-i-1]=x[i]-'0';
	for(int i=0; i<lenb; i++) b[lenb-i-1]=y[i]-'0';
	for(int i=0; i<lena; i++)
		for(int j=0; j<lenb; j++)
			c[i+j]+=a[i]*b[j];
	int temp=0;
	for(int i=0; i<len; i++) {
		c[i]+=temp;
		temp=c[i]/10;
		c[i]%=10;
	}
	while(temp) c[len++]=temp%10,temp/=10;
	while(!c[len-1] && len>1) len--;
	for(int i=len-1; i>=0; i--) ans+=c[i]+'0';
	return ans;
}

编程笔记 » C++ 高精度四则运算

赞同 (281) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽