高精度算法的意义
先来看一组数据:
int类型的范围:-2147483648~2147483647
long long类型的范围:-9223372036854775808~9223372036854775807
一般地,我们对于整数的存储都在这范围内,但是在某些情况(比如斐波那契数列数列递推到后面数值过于庞大)下还是无法满足。而C++又不会像Python一样自带高精度,这个时候,便需要我们自行编写高精度算法。高精度算法通常有高精度与高精度(或单精度)的加法、减法、乘法。除法在我的博客里不做讲解,一般用不到.
高精度算法的通用思想
1.字符串 倒序 存储至数组
2.按照一般的加、减、乘法进行计算
3.处理进位或退位
4.处理前导零及因进退位引起的长度变化
5.再次倒序输出数组元素(即数字的正序)
今天讲述高精度加单精度
数据准备
const int MAXN = 205; //数字的位数(可更改)
string num1; //高精度数字
int num2, len; //单精度数字;高精度数字的长度
int a[MAXN]; //用于高精度数字存储并计算结果
倒序存储
a数组的正序下标 | 高精度数字的倒序下标 |
---|---|
0 | len - 1 |
1 | len - 2 |
2 | len - 3 |
3 | len - 4 |
到这里我们就可以直接推导出高精度数字的倒序下标等于len - i - 1
for (int i = 0; i < len; i++) {
a[i] = num1[len - i- 1