/*--- 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