由于int只能存10^9,longlong只能存10^18,在有些时候不够用了我们就会用这种方法进行高精度运算。
思想:开一个数组,用数组存各个位数,最后按顺序输出。
A+B
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
//高精度加法
char s1[505],s2[505]; //1.全局变量容量更大,因为是放到堆里的
int a[505],b[505],c[505]; //2.全局变量自动赋0了,因为放到了0页里
int main() {
int la,lb,lc;
scanf("%s",s1); //输入两个字符串
scanf("%s",s2);
la = strlen(s1); //记录两个数字的长度,后面比较用
lb = strlen(s2);
for(int i = 0;i < la;i++) //倒装两个数
a[la-i] = s1[i] - '0';
for(int i = 0;i < lb;i++)
b[lb-i] = s2[i] - '0';
lc = max(la,lb) + 1; //防止进位,多给他一位
for(int i = 1;i <= lc;i++){ //核心算法!!!!
c[i] = c[i] + a[i] + b[i];
c[i+1] = c[i]/10;
c[i] = c[i]%10;
}
if(c[lc]==0 && lc>0) lc--;//删掉前0
for(int i = lc;i >= 1;i--) //逆序输出
printf("%d",c[i]);
return 0;
}