高精度算法的两个基本问题:高精度数的表示和高精度数的基本运算
1.高精度数的表示:
首先我想到的是do while 循环逆序存放在数组之中,但书中用string接受并且将其转化成数字,存放在数组之中

int arr[100];
string str;
cin >> str;
int len = str.length();
for(int i=0;i<n;i++) {
    arr[i]=str[n-i-1]-'0';
} 

有了上面的操作前提,我们可以对其进行简单的操作
2.高精度数的基本运算:

(1) 高精度数的加法:
算法思想:加法考虑到进位问题,如何存放进位的数组,由于存放在数组之中是按数字各位数依次排序,所以存在进位情况,只需在下标下一个直接加上进位值即可;

//前提:两个非负数整型按上述顺序存放在数组a,和数组b中 
for(int i=0;i<max(num1,num2);i++) { //num1,num2分别代表两个相加数的位数 
    a[i]=a[i]+b[i];
    if(a[i]>9) {//处理进位情况 
        a[i]=a[i]-10;
        a[i+1]++;//下个权位加上进位值 
    }
}

(2) 高精度的减法
算法思想:两个非负数整型a,b,先考虑a>b的情况,倘若对应的相减时,被减数的该位数值不足以被减数该位值相减,需要向高位减数,对应数组操作便是数组对应值自减;而 a < b的情况只需求出b-a的值,取负即可;

//前提:比较大数存放咋a数组之中,小数存放在b数组之中 
for(int i=0;i<num;i++) { //num是较大数的位数 
    if(a[i]>=b[i]) //无进位情况 
        a[i]=a[i]-b[i];
    else {
        a[i]=a[i]+10-b[i];//向高位借数 
        a[i+1]--;//高位值自减 
    }
} 

(3)高精度乘法依赖于高精度加法:
算法思想:将乘数和被乘数的对应权位值对应值相乘,依次存放的第三个数组之中,对应下标累加权位指数相同者,结束后只需值第三个数组进行依次的进位操作即可
举列:256*378
256可以表示为:200(权位值为2)+50(1)+6(0)
378表示为:300(2)+70(1)+8(0)
存入数组后为:256:a[0]=6,a[1]=5,a[2]=2
378:b[0]=8,b[1]=7,b[2]=3
组合权位得:c[0]存放6*8
c[1]=6*7+5*8
c[2]=5*7+6*3+2*8
c[3]=5*3+2*7
c[4]=2*3
验算:256*378=96768
数组相加得:6*8+(6*7+5*8)*10+(5*7+6*3+2*8)*100+(5*3+2*7)*1000+(2*3)*10000 = 96768 成立
(4)高精度乘法
==================坑============================