一、高精度算法(下文分别给出模板)
原理:
当一个数很大时,大到普通的 int 存不下时,可以考虑用数组来存储,即数组中一个位置存放一位。
但是对于数组而言,一个数顺序存入数组后,对其相加减是很简单的。但是当要进位时,是相当麻烦的。因为要将整个数组全都往后移动一位,将最高位的进位位置空出来,这个操作是 O(n) 的。
有一种方法可以很好的解决进位的问题。就是将这个数的个位数存至数组中的第一位(即 a[0]),最高位存入数组的最后一位(a[n - 1])。这样在处理进位时可以直接在数组的最后一位添加即可。在输出时倒序输出即可。
二、高精度加法
根据以上原理,我们可以很简单就模拟出具体实现方式。
举个例子:求 9724 + 377 后的值。
将两个数分别存入 a 数组和 b 数组中,如下图:
运算的话就很简单了。将第一个位置相加,如果大于 9 就要进一位(这一步可以利用取模来实现)。再将第二个位置的数相加,同时加上前一位的进位,再观察是否大于 9 。以此类推便可求出最终答案。
高精度加法代码模板
// 利用c ++ 中的 vector 来存放数。
vector<int> add(vector<int> a, vector<int> b)
{
vector<int> c;
int t = 0;
for(int i = 0; i < a.size() || i < b.size(); i ++ )
{
if(i < a.size()) t = t + a[i];
if(i < b.size()) t = t + b[i];
c.pu