高精度加法c++AC代码5种方法全解

F1,F4,F5:字符串

#include<bits/stdc++.h> 
using namespace std;
const int mx=1000;
int a[mx],b[mx],c[mx*2];
string s1,s2;
int main()
{
	int x,p;
	cin>>s1>>s2;
	int l1=s1.size();
	int l2=s2.size();
	for(int i=0;i<l1;i++) a[i]=s1[l1-i-1]-'0';
	for(int j=0;j<l2;j++) b[j]=s2[l2-j-1]-'0';
	for(int i=0;i<l1;i++)
		for(int j=0;j<l2;j++)
	  		c[i+j]+=a[i]*b[j];
	p=mx-1;
	for(int p=0;p<mx-1;p++){
		x=c[p];
		c[p]=x%10;
		c[p+1]+=x/10;
	}
	while(c[p]==0&&p>0) p--;
	for(;p>=0;p--)      cout<<c[p];   		  
}
#include<bits/stdc++.h>
using namespace std;
const int mx=10000010;
string a1,b1;
int a[mx],b[mx],c[mx],la,lb,lc,i,j=0;
int main()
{
	cin>>a1>>b1;
	la=a1.size();
	lb=b1.size();
	for(i=0;i<la;i++) a[la-i]=a1[i]-'0';
	for(i=0;i<lb;i++) b[lb-i]=b1[i]-'0';
	lc=1;
	while(lc<=la||lc<=lb){
		c[lc]=a[lc]+b[lc]+j;
		j=c[lc]/10;
		c[lc]%=10;
		lc++;
	}
	c[lc]=j;
	if(c[lc]==0)
		lc--;
	for(i=lc;i>0;i--)
		cout<<c[i];
 	return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	char n1[100],n2[100];
	ll m1[100],m2[100],sum[1000];
	ll l1,l2,l3=1;
	ll c = 0;
	memset(n1, 0, sizeof(n1));
	memset(m1, 0, sizeof(m1));
	memset(n2, 0, sizeof(n2));
	memset(m2, 0, sizeof(m2));
	memset(sum, 0, sizeof(sum));
	cin >> n1>>n2;
	l1= strlen(n1);
	l2 = strlen(n2);
	for (int i = 0; i < l1; i++) {
		m1[l1 - i] = n1[i]-'0';
	}
	for (int i = 0; i < l2; i++) {
		m2[l2 - i] = n2[i] - '0';
	}
	while (l3 <= l1 || l3 <= l2) {
		sum[l3] = m1[l3] + m2[l3]+c;
		c = sum[l3] / 10;
		sum[l3] %= 10;	
		l3++;
	}
	sum[l3] = c;
	if (sum[l3] == 0) {
		l3--;
	}
	for (int i = l3; i >= 1; i--) {
		cout<<sum[i];
	}
	return 0;
}

F2:字符串简洁

#include <bits/stdc++.h>
using namespace std;
string s1,s2,s3;
int i,p,x;
int main()
{
	cin>>s1>>s2;
	int l1=s1.size();
	int l2=s2.size();
	for(i=1;i<=l1-l2;i++) s2="0"+s2;
	for(i=1;i<=l2-l1;i++) s1="0"+s1;
	int l3=s1.size();
	int j=0; 
	s3="";
	for(p=l3-1;p>=0;p--)
	{
		int x1=s1[p]-'0';
		int x2=s2[p]-'0';
		int x3=x1+x2+j;
		j=x3/10;
		s3=char(x3+'0')+s3;
	}
	if(j==1) s3="1"+s3;
	cout<<s3;
	return 0;
}

F3:字符

#include <iostream>
#include <cstring>
using namespace std;
char a[1001],b[1001];
int aa[1001],bb[1001],ans[1001];
int main()
{
	cin>>a>>b;
	int la=strlen(a),lb=strlen(b);
	for(int i=0;i<la;i++)aa[i]=a[la-i-1]-'0';
	for(int i=0;i<lb;i++)bb[i]=b[lb-i-1]-'0';
	int lan=max(la,lb);
	int t=0;
	for(int i=0;i<=lan;i++)
	{
		ans[i]=aa[i]+bb[i]+t;
		t=ans[i]/10,ans[i]%=10;
	}
	while(ans[lan]==0)lan--;
	for(int i=lan;i>=0;i--)cout<<ans[i];
	return 0;
}

F4:

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值