我尝试使用此代码,但给出了一个错误:常量100000000000000000000000溢出int64
我该如何解决?
// Initialise big numbers with small numbers
count, one := big.NewInt(100000000000000000000000), big.NewInt(1)
答案 0 :(得分:6)
例如:
count,one := new(big.Int), big.NewInt(1)
count.SetString("100000000000000000000000",10)
答案 1 :(得分:2)
它不会起作用,因为在幕后,big.NewInt实际上正在分配一个int64。您要分配给big.NewInt的数量需要超过64位才能存在,因此失败。
但是,如果想要在MaxInt64下添加两个大数字,那么有多大,你可以做到!即使总和大于MaxInt64。这是我刚写的一个例子(http://play.golang.org/p/Jv52bMLP_B):
strlen(arr)
结果是:
func main() {
count := big.NewInt(0);
count.Add( count, big.NewInt( 5000000000000000000 ) );
count.Add( count, big.NewInt( 5000000000000000000 ) );
//9223372036854775807 is the max value represented by int64: 2^63 - 1
fmt.Printf( "count: %v\nmax int64: 9223372036854775807\n", count );
}
现在,如果您仍然对NewInt的工作原理感到好奇,那么以下是您使用的功能,取自Go的文档:
count: 10000000000000000000
max int64: 9223372036854775807
来源: