高精度加法复习笔记
1.0 问题
在我们熟悉的数据类型中,能够储存的最大的数也只是longlong的范围。
虽然有些编译器也提供__int128类型,但是最多也只能表示40位左右的数,大小依然有限,而且适用范围也很受限。
那么,又没有办法来模拟非常长的整数呢?
1.1 思路
既然变量不能储存大数,我们可以尝试使用数组来储存一个数。
用数组的每一位来储存那个数字上的一位,也就是说,用一个长度为n的数组记录一个n位数字。
那么,问题又来了,我们如何进行加法运算呢
首先,回顾一下小学学习的竖式计算:
1 | 1 9 1 |
可以看到,用竖式计算时,为了保证进位正确,是从低位向高位运算的
我们可以模拟这个运算方法:
- 方便读入,使用string直接读入大数
- 将string类型的数转换为数字,并为了进位方便,倒叙存储在数组内
- 将两个数加起来
- 把两数的和对10取整,即进位。
- 例如
- 两数的和为9,对10取整为0,即进位为0;
- 两数的和为19,对10取整为1,即进1位、
- 例如
- 处理完进位后,把两数的和对10取余,留下个位。
- 例如
- 和为9,对10取余,留下个位为9
- 和为19,对10取余,留下个位为9
- 例如
- 最后将数组倒叙输出即可。
1.2 代码
根据上面的描述,可以得到如下代码:
1 |
|
1.3 时间复杂度分析
该算法次数最多的循环为最大数的数位次,时间复杂度即为
1.4 写在最后
到这里,就是高精度加法的全部内容
所以用python他不香么,自带高精度还有各种库
手动 @€€£ (doge
纯粹为了能多加一小节而多扯几句
好了不皮了
end.
by X3B0A1
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 X3B0A1's blog!
评论
ValineGitalk