gpt4 book ai didi

go - 是 golang 的 2 的幂

转载 作者:行者123 更新时间:2023-12-05 02:36:00 25 4
gpt4 key购买 nike

我想检查给定的数字是否是 2 的幂。我写了一个代码,但我无法返回 true 或 false,我认为某处存在无限循环。我只允许在代码中使用导入包中的函数。我不知道该怎么做才能纠正错误。如果你能帮助我,我会很高兴:)

package main

import (
"os"
"strconv"
)

func main() {
for len(os.Args) == 2 {
numbers, err := strconv.Atoi(os.Args[1])
if err != nil {
panic(err)
}
newnum := numbers
counts := 0
for numbers != 1 {
if newnum%2 != 0 {
} else {
newnum = newnum / 2
}
counts++
}
var x int = 2 ^ counts
if x == numbers {
return true
} else {
return false
}
}
}
`

最佳答案

正如@phuclv 所评论的,我已经使用 n & (n - 1) == 0 为您的场景创建了一个示例程序,如下所示:

//Let's assume n = 16(00010000)

//Now find x = n-1 => 15(00001111) => x & n => 0

func CheckPowerOfTwo(n int) int {
//added one corner case if n is zero it will also consider as power 2
if n==0{
return 1
}
return n & (n - 1)
}
func main() {
var n = 16
flag := CheckPowerOfTwo(n)
if flag == 0 {
fmt.Printf("Given %d number is the power of 2.\n", n)
} else {
fmt.Printf("Given %d number is not the power of 2.\n", n)
}
}

你可以在这里运行它:https://go.dev/play/p/9cRWwiFAIn8

关于go - 是 golang 的 2 的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70372007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com