如果y大于64,为什么pow的结果为零?
package main
import (
"fmt"
)
func pow(x uint64, y uint64) uint64 {
if y > 64 {
return 0
}
var result uint64 = 1
var counter uint64
var previous uint64
for y > 0 {
previous = result
result = result * x
y = y - 1
counter++
if result == 0 {
return previous
}
}
return result
}
func main() {
result1 := pow(2, 64)
fmt.Println(result1)
result2 := pow(2, 32)
fmt.Println(result2)
result3 := pow(2, 3)
fmt.Println(result3)
}
我只是意识到这是因为它位于基数2中。对此您能说什么?(我对使用Golang编程还是很陌生。)
您的战俘不应该基于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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句