我正在解决Project Euler问题16,我最终得到了一个可以在逻辑上解决它的代码,但是我无法处理,因为我相信它溢出或者什么?我尝试使用int64代替int,但它只打印0,0.如果我将功率更改为30以下的任何功能都可以,但是30以上它不起作用,任何人都可以指出我的错误吗?我相信它无法计算2 ^ 1000.
// PE_16 project main.go
package main
import (
"fmt"
)
func power(x, y int) int {
var pow int
var final int
final = 1
for pow = 1; pow <= y; pow++ {
final = final * x
}
return final
}
func main() {
var stp int
var sumfdigits int
var u, t, h, th, tth, l int
stp = power(2,1000)
fmt.Println(stp)
u = stp / 1 % 10
t = stp / 10 % 10
h = stp / 100 % 10
th = stp / 1000 % 10
tth = stp / 10000 % 10
l = stp / 100000 % 10
sumfdigits = u + t + h + th + tth + l
fmt.Println(sumfdigits)
}
Run Code Online (Sandbox Code Playgroud)
解决此问题的方法需要精确的整数数学,最大为1000位.但是你使用的int是32位或64位.math/big.Int可以处理这样的任务.我故意不提供现成的解决方案,big.Int因为我认为你的目标是自己学习,我认为这是Project Euler的意图.