前言
高精度的运算在算法题尤为常见,在处理一些大型数据的项目中也需要用到。虽然Boost库中有处理高精度问题的模板,但是标准库中并没有。为了方便学习,本文提供了高精度运算的模板,供大家参考。
什么是大整数
众所周知,最大的整型long long的范围是【-9223372036854775808~9223372036854775807】,即使是无符号位的unsigned long long最大值也只是扩大一倍,那当题目需要用到或需要输出比long long类型的范围还要大的数字时,我们是不是就不能用常规办法去接收这些数字了。这个时候使用大整数就可以解决上述问题——也就是解决接收超出整型范围数字的问题。
大整数的表示
其实大整数的表示方法也不难,我们使用数组就可以了(当然C++的vector容器也是可以的,原理都一样,但为了照顾C语言的小伙伴,本文用数组表示)。
假设现在有一个int类型数组d[1000],那么我们可以用数组中的每一位元素表示大整数中的每一位数字,比如有整数123456789,那么我们可以用d[0]表示亿位上的【1】,用d[1]表示千万位上的【2】...以此类推,我们就可以用一个长度为9的数组表示这个大整数了。
当然为了契合我们后面四则运算的思维,我们将数组元素的顺序翻转一次,也就是在数组靠前的元素表示低位,而靠后的元素表示高位(原因后面会讲到),也就是如下图所示: