高精度加法
简单模拟一下小学竖式加法即可
那么何为高精度呢,简单来说就是处理 long long都处理不了的数据,既然long long存不了,那我们就用字符串存啦- 。 -
精髓
1.我们可以用两个整型数组存字符数组的每一位,然后比较两个数组的长度,取最大的那个。
存的时候一般倒着存(从低位到高位,因为整数没有除个位以下的数位,但你的最高位还可以进位,那么你就又要开一个位置来存这个新的最高位)。
for (int i = 0 ; i < lena ; i++) s1[i] = a[strlen(a)-1-i]-'0';
for (int i = 0 ; i < lenb ; i++) s2[i] = b[strlen(b)-1-i]-'0';
int lenc = max(lena,lenb);
2.然后进行模拟数位加法即可,如果s1[i]+s2[i]>=10,就进位,下一位加1,如此往复循环。
for (int i = 0 ; i < lenc ; i++)
{
c[i] = c[i]+s1[i]+s2[i];
c[i+1] = c[i]/10;
c[i] = c[i]%10;
}
3.最后需要判断一下最高位相加是否要进1
if (c[lenc]) cout<<"1";
Code1
# include <bits/stdc++.h>
using namespace std;
char a[10000],b[10000];
int s1[10000],s2[10000],c[10000];
int main ()
{
scanf("%s %s",a,b);
int lena = strlen(a),lenb = strlen(b);
for (int i = 0 ; i < lena ; i++) s1[i] = a[strlen(a)-1-i]-'0';
for (int i = 0 ; i < lenb ; i++) s2[i] = b[strlen(b)-1-i]-'0';
int lenc = max(lena,lenb);
for (int i = 0 ; i < lenc ; i++)
{
c[i] = c[i]+s1[i]+s2[i];
c[i+1] = c[i]/10;
c[i] = c[i]%10;
}
if (c[lenc]) cout<<"1";
for (int i = lenc-1 ; i >= 0 ; i--) cout<<c[i];
return