1 回答

TA貢獻1780條經驗 獲得超4個贊
你的戰俘不應該基于什么是 y。更大的數字會更少。
用這個:
`
// Assuming that b will never be 0
func mult(a, b uint64) (uint64, bool) {
result := a * b
return result, (result/b == a)
}
func pow(x uint64, y uint64) uint64 {
if y == 0 {
return 1
}
if x == 0 {
return 0
}
var result uint64 = 1
var counter uint64
var previous uint64
var ok bool
for y > 0 {
previous = result
result, ok = mult(result, x)
if !ok {
return 0
}
y = y - 1
counter++
if result == 0 {
return previous
}
}
return result
}
澄清之前的舊答案:
實際上應該是 63。這是因為 uint64 最多可以有 2 ^ (64) -1 的最大數字(2 的冪 64 minux 1)。所以 2 次方可以產生的最大數量是 2 ^ 63。
您可以通過運行代碼來確認這一點。如果您刪除 y > 64 的限制,它將為您提供與所有大于 63 的數字相同的結果。(9223372036854775808 或 2^63)。該限制應為 y > 63。
- 1 回答
- 0 關注
- 174 瀏覽
添加回答
舉報