gpt4 book ai didi

c - 为什么我的 (Leetcode #231) Power of Two 给出了错误的结果?

转载 作者:行者123 更新时间:2023-12-05 01:24:11 29 4
gpt4 key购买 nike

该问题要求编写一个函数,该函数将一个整数作为输入,并在该整数是 2 的幂时返回 true。我想使用按位 AND 运算符和逻辑移位来编写我的函数来练习这些概念。我尝试遍历许多输入示例并认为我的代码可以正常工作,但是当 Leetcode 使用“n=2”的测试用例时,我的代码返回 false 而不是 true。

我的思路是,如果最低有效位与 1 的 AND 运算等于 0(我试图进行位掩码并且只对 n 的 LSB 执行 AND 运算),那么 n 有可能成为2. 所以我将 n 向右移动一位,并评估 n 是否为 1(然后是,它是 2 的幂,并向函数返回 true)。如果 n 不为 1,并且 LSB 与 1 的与运算不为 0,则这意味着 n 绝对不是 2 的幂 - 所以我跳出 while 循环并返回 false。

任何人都可以帮助查明哪里出了问题吗?

bool isPowerOfTwo(int n){

while(n>0)
{
if(n==1)
return 1;

else if(n&1 == 0)
n = n>>1;

else
break;
}
return 0;
}

最佳答案

你的逻辑是正确的。不幸的是,您陷入了运算符优先级陷阱:==& 绑定(bind)更紧密,因为 ... history . n&1 == 0 被解析为好像 n&(1 == 0) 自然总是 0。

修复方法是使用 (n & 1) == 0

关于c - 为什么我的 (Leetcode #231) Power of Two 给出了错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871299/

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