A+B高精度计算:
我的思路是:用两个字符数组来装两个需要相加的数字,s1[MAXN],s2[MAXN],然后需要定义三个整型数组,num1[MAXN], num2[MAXN], sum[MAXN],然后通过strlen计算出两个数组的长度,然后将两个字符数组转换成整型数组,这个时候,我们知道,两个数的相加减,得到的结果的长度最多最多比两个数字的最大的数字的长度大一,因此我们就能够知道结果数字的长度最多等于max(第一个数字,第二个数字)+1,然后两个数字相加减可能会产生进位,因此我们需要定义一个整型jw变量,每一循环的时候,sum[i] = num1[i]+sum2[i]+j2; jw = sum[i]/10; sum[i] %= 10; 通过这样的循环我们就把结果放进了sum数组中,因为我们放的时候是倒着放的(后面的代码部分会显示出来),而定义的整型数组的初始值都是零,因此我们需要把零去掉,最后在输出结果。
代码部分如下:
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 5e2+5;
char s1[MAXN], s2[MAXN];
int num1[MAXN], num2[MAXN], sum[MAXN];
int main(){
cin >> s1 >> s2;
int len1 = strlen(s1);
for(int i=0; i<len1; i++)
num1[i] = s1[len1-i-1]-'0';//将字符里的字符转换成整型数组中
int len2 = strlen(s2);
for(int i=0; i<len2; i++)
num2[i] = s2[len2-i-1]-'0';
int jw = 0;
int len = max(len1, len2)+1;
for(int i=0; i<len; i++){
sum[i] = num1[i]+num2[i]+jw;
jw = sum[i]/10;
sum[i] %= 10;
}
for(int i=len-1; i>=0; i--)
if(sum[i] == 0 && len>1)//(为什么len必须>1呢?因为假设计算的结果等于0,那么len=1,此时sum[i] = 0, 而如果此时没有len>1的条件,就会进行len--,那么在输出sum数组的时候就什么都没有了,len=0;)
len--;
else
break;
for(int i=len-1; i>=0; i--)
cout << sum[i];
cout << endl;
return 0;
}
本文介绍了一种使用字符数组进行高精度加法计算的方法。通过将输入的数字转换为字符数组,然后转换为整型数组,利用进位原理进行相加,并存储结果到新的整型数组中。最后,从后向前输出结果,去除前导零。
&spm=1001.2101.3001.5002&articleId=118447005&d=1&t=3&u=ea56dfc598f54b9eb13b36c398a37f13)
2817

被折叠的 条评论
为什么被折叠?



