高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,这里,使用C++STL中的vector类来实现高精度数。
这里不妨将高精度数定义为very_long_int。这里需要一个容器来存储very_long_int类型数的每一位数,一般选择用数组来存储,但是向量的自动调整大小特性使得它比数组更加适合来充当这个容器。关于very_long_int类和vector类的关系,考虑到very_long_int类的主要目的是执行算法,因此它极少用到vector类的函数。或者说“very_long_int类有一个向量”而不是“very_long_int是一个向量”,及它们是(复合/聚合)的关系。一个高精度数的每一位数是一个digits,一个vector对象。同时,为了节约空间,这里选择只占据一个字节的char类型作为向量digits的对应类型,字段的定义是:
vector<string>digits;
这些位将按照正常的顺序自前向后地存储在向量digits中。例如,如果一个very_long_int的值是758,那么7将存储在下标0,5存储在下标1,8存储在下标2.
下面将给出very_long_int类的三个方法,3个重载运算符的实现&