什么是高精度
高精度算法(High Accuracy Algorithm)是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。
整个算法思路
先把两个数当成字符串****倒着存进数组
即高位存在数组后面,低位存在数组低位
顺便读取整数的位数
根据位数做加法—类似于竖式
加到最后一位,看是否存在进位,来进行扩位
最后别忘了倒着输出
位数与数组下标的问题
若从0开始存
最高位有进位的时候书的总位数要+1
为了后面倒着输出的时候有cnt-1流出富裕的一位
#include <iostream>
using namespace std;
//做题技巧一般数组在函数外面设置成常量
//初始化数组 100000
const int N=1000010;
int A[N],B[N],c[N];
//高精度加法数组
int add(int a[],int b[],int c[],int cnt){
int t=0;//得有个变量用来表示进位,cnt存俩个数组的每位对应的数,以及前一位进到本位的进位1来之和
for(int i=0;i<cnt;i++){
t=a[i]+b[i]+t;
c[i]=t%10;
t/=10;
}
if(t)c[cnt++]=1;
return cnt;
}
int main(){
string a;
string b;
cin>>a>>b;
//用一个变量来统计数组的长度,即每个数的位数
//.size()不算字符串末尾的\0
//且c++ string字符串里的末尾不一定有\0
int cnt1=0;
for(int i=a.size()-1;i>=0;i--)
A[cnt1++]=a[i]-'0';
int cnt2=0;
for(int i=b.size()-1;i>=0;i--)
B[cnt2++]=b[i]-'0';
int tot=add(A,B,c,max(cnt1,cnt2));
for(int i=tot-1;i>=0;i--) cout<<c[i];
// if(c[tot]==0){
//for(int i=tot-1;i>=0;i--)
//cout<<c[i];}
//else for(int i=tot;i>=0;i--) cout<<c[i];
}