高精度加法(A+B problem)
/*--- 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,答案错误,所以一定要考虑进位!!!。
浙公网安备 33010602011771号