我正在解決Project Euler question 16,我最終得到了一個(gè)可以在邏輯上解決它的代碼,但無法處理,因?yàn)槲艺J(rèn)為它溢出或什么?我嘗試用 int64 代替 int,但它只打印 0,0。如果我將功率更改為低于 30 的任何值,它可以工作,但高于 30 則不起作用,有人能指出我的錯(cuò)誤嗎?我相信它無法計(jì)算 2^1000。// PE_16 project main.gopackage mainimport ( "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)}
3 回答

智慧大石
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
您不需要使用math/big. 下面是一個(gè)小學(xué)生將十進(jìn)制數(shù)加倍的數(shù)學(xué)方法作為提示!
xs以最不重要的一階保存十進(jìn)制數(shù)字。傳入指向數(shù)字 ( pxs)的指針,因?yàn)榍衅赡苄枰兇蟆?/p>
func double(pxs *[]int) {
xs := *pxs
carry := 0
for i, x := range xs {
n := x*2 + carry
if n >= 10 {
carry = 1
n -= 10
} else {
carry = 0
}
xs[i] = n
}
if carry != 0 {
*pxs = append(xs, carry)
}
}
- 3 回答
- 0 關(guān)注
- 250 瀏覽
添加回答
舉報(bào)
0/150
提交
取消