专栏文章

高精度加减乘法

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip1wobe
此快照首次捕获于
2025/12/03 04:49
3 个月前
此快照最后确认于
2025/12/03 04:49
3 个月前
查看原文
CPP
#include<bits/stdc++.h>
using namespace std;
void jf(string a,string b){
	int an[1000]={0},bn[1000]={0};
	int lena=a.size(),lenb=b.size();
	int lenmax=max(lena,lenb);
	for(int i=0;i<lena;i++){
		an[i]=a[lena-i-1]-'0';
	}
	for(int i=0;i<lenb;i++){
		bn[i]=b[lenb-i-1]-'0';
	}
	for(int i=0;i<lenmax;i++){
		an[i]+=bn[i];
		if(an[i]>=10){
			an[i]%=10;
			an[i+1]+=1;
		}
	}
	if(an[lenmax]!=0)lenmax++;
	for(int i=lenmax-1;i>=0;i--){
		cout<<an[i];
	}
}
void gao_jing_du_jian_fa(string a,string b){
	int an[1000],bn[1000];
	int lena=a.size(),lenb=b.size();
	int len=max(lena,lenb);
	bool f;
	if(lena==lenb){
		if(a>b)f=0;
		else f=1;
	}
	else{
		if(len==lena)f=0;
		else f=1;
	}
	if(f)swap(a,b);
	for(int i=0;i<lena;i++){
		an[i]=a[lena-i-1]-'0';
	}
	for(int i=0;i<lenb;i++){
		bn[i]=b[lenb-i-1]-'0';
	}
	for(int i=0;i<len;i++){
		an[i]-=bn[i];
		if(an[i]<0){
			an[i]+=10;
			an[i+1]-=1;
		}
	}
	while(an[len-1]==0&&len>1)len--;
	if(f)cout<<"-";
	for(int i=len-1;i>=0;i--)cout<<an[i];
}
void gao_jing_du_cheng_fa(string a1,string b1){
	int a[1000]={0},b[1000]={0},c[1000]={0};
	int lena=a1.size(),lenb=b1.size();
	for(int i=lena-1;i>=0;i--){
		a[i]=a1[lena-1-i]-'0';
	}
	for(int i=lenb-1;i>=0;i--){
		b[i]=b1[lenb-1-i]-'0';
	}
	for(int i=0;i<lena;i++){
		for(int j=0;j<lenb;j++){
			c[i+j]+=a[i]*b[j];
		}
	}
	int len_sum=lena+lenb;
	for(int i=0;i<len_sum;i++){
		c[i+1]+=c[i]/10;
		c[i]%=10;
	}
	while(c[len_sum-1]>=10){
		c[len_sum]+=c[len_sum-1]/10;
		c[len_sum-1]%=10;
		len_sum++;
	}
	while(c[len_sum-1]==0&&len_sum>1)len_sum--;
	string ans="";
	for(int i=0;i<len_sum;i++){
		ans+=c[i]+'0';
	}
	for(int i=len_sum-1;i>=0;i--){
		cout<<ans[i];
	}
}
int main(){
	string a,b;
	char c;
	cin>>a>>c>>b;
	if(c=='+'){
		jf(a,b);
	}else if(c=='-'){
		gao_jing_du_jian_fa(a,b);
	}else if(c=='*'){
		gao_jing_du_cheng_fa(a,b);
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...