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

Golang Fibonacci计算出现

曹泉
2023-03-14
问题内容

我目前在斐波那契计算中使用以下代码。我正在尝试计算大数,但是一旦达到100,计算就会关闭。对于fib(100),我的代码返回3736710778780434371,但是当我查看其他来源时,它告诉我正确的计算应该是354224848179261915075。我的代码是否有问题,或者是否与计算机硬件或其他问题有关?

package main
import "fmt"

func fib(N uint) uint{


  var table []uint
  table = make([]uint, N+1)
  table[0] = 0
  table[1] = 1


  for i := uint(2); i <= N; i += 1 {

     table[i] = table[i-1] + table[i-2]


  }

  return table[N]

}

func main() {
   fmt.Println(fib(100))
}

问题答案:

您正在遇到整数溢出!您最多只能使用uint的大小进行计算uint;一旦您超越了它的界限,它将(无声地)再次绕回原处。

在您的情况下,看起来a的uint长度为64位。(其大小取决于您所运行的平台。)这意味着您最多可以存储2 64
-1的值。如果再添加一个,它将回零,并且不会返回错误。

如果将得到的答案和正确的答案转换为十六进制,那么您会发现情况确实如此。你最终以

  33DB76A7C594BFC3

正确的答案是

1333DB76A7C594BFC3

请注意,就目前而言,您的答案是正确的……只是远远不够。您只得到答案的低64位。您错过了其他13 * 2 64。

要更正它,您需要使用Package big中的任意大小的整数,而不是uint



 类似资料:
  • 问题内容: 我正在尝试找到一个MySQL查询,该查询将在特定字段中找到DISTINCT值,计算该值的出现次数,然后按计数顺序对结果进行排序。 示例数据库 预期结果 问题答案:

  • 问题内容: 是否有更好的方法来计数Java8中的int出现次数 问题答案: 尝试:

  • 在用户输入的字符串中,我很难使用计数器。代码定位最常见的字符,但我可以将计数器放在哪里,它计算最常见的字符。Java,请使用当前代码。这是最后一个方法。

  • 问题内容: 我堆了一会儿。我尝试调试,但找不到解决方案。我正在尝试计算数字的出现。所以我的问题是当我打印输出时 代替 因此,如果数字出现的次数超过1,则应该只说一次,而不是出现的次数。欢呼这是代码 问题答案: 另一个选项是番石榴的Multiset类,它将为您跟踪计数: 在这里,Multiset,HashMultiset和Ints都是番石榴类。 请注意,Multiset通过使用Map和counter

  • 问题内容: 我的sql查询获取固件的错误修复验证列表,例如def-456是一张票,要求我对产品进行固件测试。def-456有几个子任务,记录结果。结果记录为:id:abc-123,abc-124,abc-125等(如下表所示)。这些对应的ID的结果为“通过”或“失败”。我需要计算两个值----> 1.尝试次数:在以下示例中,尝试次数将为3/5,有3次通过和2次失败(即通过/通过+失败),在这里我可

  • 我有这个模式 列表表 [{“movie_id”:100,“gene1”:“犯罪”,“计数”:1,“id”:100},{“movie_id”:141267,“gene1”:“犯罪”,“计数”:1,“id”:141267},{“movie_id”:207932,“gene1”:“犯罪”,“计数”:1,“id”:207932},{“movie_id”:238636,“gene1”:“惊悚”,“计数”:1