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 关注
- 149 浏览
添加回答
举报