作为家庭作业的一部分,我正在研究斐波那契数发生器。用预定义的数字类型(例如 Go 中的 int32)表示这些斐波那契数的输出变得不可能,您必须使用类似这样的东西来处理大量数字: https ://golang.org/pkg/math/big/
如果我们稍微改变问题的询问,而不是询问第 1,000 个斐波那契数的结果,而是询问相同数字的最后一位,Go 可以毫无问题地处理这个问题。
我的问题是:
Go 是否能够计算非常大的数字,因为当数字开始变得非常大时需要更多内存时,语言能够扩展堆栈大小?当这些数字开始变得如此之大以至于无法放入内存中的 32 或 64 位整数类型时,它们在哪里/如何存储它们?
如果 Go 能够对不适合 int32 等基本类型的大量数字进行计算,为什么该语言会强制您将这些数字存储在一个太小而无法处理的基本类型中?例如,如果 Go 能够将两个非常大的数字相加并确定一个看似没有问题的结果,为什么我不能存储这个值以供将来使用或不使用另一个库将其打印到屏幕上呢?我想我不确定为什么如果在幕后 Go 能够很好地对它们进行操作,那么在尝试执行诸如将它们打印到屏幕之类的操作时,为什么数字必须适合预定义的大小。
这是一些示例代码,我在其中存储并打印第 n 个斐波那契数的最后一位,而不是打印出第 n 个项的实际值,因为数字变得如此之大。请注意,我仍然如何在 append 语句中添加这些大量数字,但只存储最后一个数字。
似乎 Go 使用“ascii”排序。
您可以collate "C"在 Postgres 中使用:
SELECT word
from unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) as t(word)
ORDER BY word collate "C" ;package main
import "fmt"
func main() {
var n int
var fibNums = []int{0, 1}
var i int
fmt.Scanln(&n)
for i = 0; i < n; i++ {
fibNums = append(fibNums, (fibNums[i]+fibNums[i+1])%10)
}
fmt.Println(fibNums[len(fibNums)-2])
}
泛舟湖上清波郎朗
阿晨1998
跃然一笑
随时随地看视频慕课网APP
相关分类