项目欧拉16 - 帮助解决它

Roh*_*jja 3 go

我正在解决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)

zzz*_*zzz 8

解决此问题的方法需要精确的整数数学,最大为1000位.但是你使用的int是32位或64位.math/big.Int可以处理这样的任务.我故意不提供现成的解决方案,big.Int因为我认为你的目标是自己学习,我认为这是Project Euler的意图.