当前位置: 首页 > 面试题库 >

Java Longs中的斐波那契计算显示为负

宋奇希
2023-03-14
问题内容

我的斐波那契计算器可以正常工作,但是当数值更高时,结果将变为负数,就像Integer超过最大值一样。

它正在使用缓存java.util.Map<Integer, Long>。进入的所有内容都与Map预期的一样,但是当打印出来时,我得到例如291的信息:

-784134397488903422

根据http://www.maths.surrey.ac.uk/hosted-
sites/R.Knott/Fibonacci/fibCalcX.html
,应为:

2923602405716568564338475449381171413803636207598822186175234

我的Longs 似乎出了点问题,但我不确定到底是什么。有人可以指出正确的方向吗?

Map条目的值:http :
//pastebin.com/uje07Ays


问题答案:
我认为您超出了可以存储在Java用于long类型的带符号的64位整数中的最大long值之上,有关Long和Java
API中的这些的更多信息: http
//docs.oracle.com/javase/7
/docs/api/java/lang/Long.html

64位有符号整数的最大正值为2 ^ 63 -1:,9 223 372 036 854 775 807您的值似乎已达到此限制,如果有符号整数的最高位为1,则有符号整数将变为负数(请参阅2的补码整数)更多详细信息:http
:
//en.wikipedia.org/wiki/Two%27s_complement)。

您需要使用BigInteger来具有任意精度的整数http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html



 类似资料:
  • 主要内容:递归生成斐波那契数列,总结公元 1202 年,意大利数学家莱昂纳多·斐波那契提出了具备以下特征的数列: 前两个数的值分别为 0 、1 或者 1、1; 从第 3 个数字开始,它的值是前两个数字的和; 为了纪念他,人们将满足以上两个特征的数列称为斐波那契数列。 如下就是一个斐波那契数列: 1 1 2 3 5 8 13 21 34...... 下面的动画展示了斐波那契数列的生成过程: 图 1 斐波那契数列 很多编程题目要求我们输

  • 本文向大家介绍JavaScript中的斐波那契数列,包括了JavaScript中的斐波那契数列的使用技巧和注意事项,需要的朋友参考一下 斐波那契数是这样的数,使得该序列中前两个后的每个数字都是前两个的和。该系列从1、1开始。示例- 我们可以编写一个程序来生成nth,如下所示: 您可以使用以下方式进行测试: 这将给出输出- 让我们看看这些函数调用实际上是如何发生的- 当我们调用f(5)时,我们将调用

  • 题目链接 NowCoder 题目描述 求斐波那契数列的第 n 项,n <= 39。 <!--1}\end{array}\right." class="mathjax-pic"/> --> 解题思路 如果使用递归求解,会重复计算一些子问题。例如,计算 f(4) 需要计算 f(3) 和 f(2),计算 f(3) 需要计算 f(2) 和 f(1),可以看到 f(2) 被重复计算了。 递归是将一个问题划分

  • Python3 实例 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13,特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和。 Python 实现斐波那契数列代码如下: 实例(Python 3.0+)# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com

  • 我认为第一个不可避免的步骤是做一个n个斐波那契数的数组,如下所示: 当然,我们可以通过只计算那些小于或等于n的斐波那契数来优化它,但这没有多大帮助,因为动态数组是不允许的。那么我们如何才能避免指数级的时间复杂度呢?

  • 1. 前言 本节内容是递归算法系列之一:斐波那契数列递归求解,主要介绍了斐波那契数列的定义,然后用递归的实现思想分析了一下斐波那契数列,最后给出了基于 Java 代码应用递归思想实现斐波那契数列的代码实现及简单讲解。 2. 什么是斐波那契数列? 斐波那契数列(Fibonacci sequence),也称之为黄金分割数列,由意大利数学家列昂纳多・斐波那契(Leonardo Fibonacci)提出。