大家好,今天小编关注到一个比较有意思的话题,就是关于java语言链表实现大整数加法的问题,于是小编就整理了2个相关介绍Java语言链表实现大整数加法的解答,让我们一起看看吧。
JAVA开发中,如果要存一组有序的整数集合,可以怎样实现?
如果要存一组有序的 int 型数据***,我们可以如何实现?通常我们会想到最常见的两种实现方案:
1. 数组
可能大多数同学最先想到的是用数据实现,将有序的数据***存放在数据中,可以使用二分法进行查找,效率比较高,但是对于新增和删除的操作并不友好,因为这些操作都需要移动后面位置的元素。
2. 链表
那么有没有什么数据结构可以让查询、新增、删除操作都变得很快呢?这就是我们今天要介绍的跳跃表了,让我们看几张图,很容易理解。
银行服务器是如何实现存储超大数字而不会溢出的?
广而泛之不谈具体场景吧。
我们可以根据数字的大小动态分配内存,位数不够了就再往上加。就好比我们从小学的加法从来没有限制过操作数的大小。纸有多长就能写多长。
只是这么做我们就不能享受机器语言中由硬件对整个整数所有32个位批量处理并且解决进位的待遇了。我们必须手动迭代,管理进位。
打个最直观但低效的例子。我们可以使用链表,将二进制数的低数位放在列表头方向,进行比如加法运算时同时迭代两个操作数的链表,按位相加,再加上上一位的进位,如此构造结果。这甚至是可以单纯靠布尔逻辑而不依赖硬件加法实现
当然,我们没有必要完全舍弃硬件带来的"批处理"功能。而且事实上,硬件中的"行波进位加法器"就是通过上面描述的原理实现的。只是行波进位加法器使用定长数组罢了。那么,我们可以在数组或者链表中,以硬件一批次能处理的大小存储大整数,用硬件实现的加法完成组内进位。而硬件加法产生溢出时通过比如在某一特殊寄存器中立下的flag告诉我们是否应该往下一组数位中输入进位。
如果是浮点数的话就用科学计数法吧。"浮点"这个叫法的来源就是这个。
到此,以上就是小编对于JAVA语言链表实现大整数加法的问题就介绍到这了,希望介绍关于JAVA语言链表实现大整数加法的2点解答对大家有用。