Bootstrap

c++高精度算法

c++语言

什么是高精度

有时,我们要做特别大数据的计算。多大呢?几百万位,远远超过了long long的数据范围,直接用long long肯定会溢出。这时候我们就要用高精度算法
PS:python自带高精度

所有高精度算法的基本原理

大体的思路,就是用字符数组(因为字符数组可以达到一个下标对应一个数字,达到按位处理的目的),然后转到整形数组(整型数组才能进行计算)一个下标对应一个数字,用另一个数组进行按位相加。

高精度运算

现在只写高精度加法、乘法。以后会逐渐补充

加法

思路分析

我们用数学竖式的方法来分析
别说这不是高精度,原理一样的,要不你来写个几百万位的竖式(防杠精)
在这里插入图片描述
这是小学数学的知识 对应位相加,有进位的加到下一位。

现在,按照刚才的思路进行模拟。仍然是134+84。但存到计算机中,再按位相加,变成了这样:
在这里插入图片描述
对于这种错位的情况,我们一般采取的办法是倒序存储(先不说代码如何实现)。于是就是这样:
在这里插入图片描述
就是结果也是反着的。但是没关系,我们再进行倒序输出。218,没错!

代码

有了上面的说明,代码就很好懂了。

#include<iostream>
#include<cstring>
using namespace std;
int main(){
   
	int add1=0; //专门处理最后输出时进位的问题
	int a[1000]={
   },b[1000]={
   },c[2000]; //分别对应加数1,加数2,和
	char a1[1000],b1[1000];
	//1.输入、转换
	cin>>a1>>b1;
	//因位数可能不同,所以倒序存储要分两次完成
	for(int i=0;i<strlen(a1);i++){
   
		a[strlen(a1
;