首页 > 其他分享 >高精度加法(A+B problem)

高精度加法(A+B problem)

时间:2022-10-13 19:22:28浏览次数:54  
标签:lenb lena 高精度 int max sum 加法 problem 505

 

/*--- A+B problem 高精度 ---*/
#include<bits/stdc++.h>
using namespace std;
int max(int a,int b)
{
	return a>=b?a:b;
}
int main(void)
{
	char a[505],b[505];
	int numa[505],numb[505];
	int lena,lenb;
	int sum[505];

	memset(sum,0,sizeof(sum));        //数组清零!!!十分重要
	memset(numa,0,sizeof(numa));    
	memset(numb,0,sizeof(numb));
	
	cin>>a>>b;
	lena=strlen(a);
	lenb=strlen(b);
	
	for(int i=0;i<=lena-1;i++){ numa[lena-1-i]=a[i]-'0'; }//把字符转化为数字
	for(int i=0;i<=lenb-1;i++){ numb[lenb-1-i]=b[i]-'0'; }
	
	for(int i=0;i<=max(lena,lenb)-1;i++){ sum[i]=numa[i]+numb[i]; }
	
	for(int i=0;i<=max(lena,lenb)-1;i++)
	{
		while(sum[i]>=10)          //讨论进位问题
		{
			sum[i]=sum[i]-10;
			sum[i+1]++;
		}
	}
	
	if(sum[max(lena,lenb)]>0) for(int i=max(lena,lenb);i>=0;i--)//注意!!!最后一位有可能进位
	cout<<sum[i];
	else for(int i=max(lena,lenb)-1;i>=0;i--)
	cout<<sum[i];
	
	return 0;
}    

 高精度加法,由于数字过大,用long long也存不下,故我们需要改变思路,采用字符串进行操作。而在纸上简单的进行模拟后(这一步十分的重要!!!!一定要先模拟,不能在脑子里臆想)我们可以得知需要将数字反过来写之后才能进行计算,于是便有了上面的代码。要注意的是最后以为也有可能进位,例如99+1变为100,如果还是用max(lena,lenb)-1作为开始进行输出就只会输出00,答案错误,所以一定要考虑进位!!!。

标签:lenb,lena,高精度,int,max,sum,加法,problem,505
From: https://www.cnblogs.com/KeviNieZenith/p/16789361.html

相关文章