给你一个整数n,请你判断该整数是否是2的幂次方 举例: n=1 输出:yes n=2 输出:yes n=3 输出:no 用while循环
时间: 2024-10-17 10:15:24 浏览: 66
要判断一个整数 `n` 是否是 2 的幂次方,你可以使用如下的 C++ 代码实现,利用 while 循环来不断除以 2 直到结果为 1 或者 n 变成 1:
```cpp
#include <iostream>
bool isPowerOfTwo(int n) {
if (n <= 0) {
return false; // 如果 n 是负数或零,则不是 2 的幂次方
}
int power = 0;
while (n % 2 == 0) { // 当 n 是偶数时(即能被 2 整除)
n /= 2; // 除以 2
++power; // 增加幂次
}
return n == 1; // 如果 n 最终变成 1,说明它是 2 的幂次方,否则不是
}
int main() {
int n;
std::cout << "请输入一个整数: ";
std::cin >> n;
if (isPowerOfTwo(n)) {
std::cout << n << " 是 2 的幂次方" << std::endl;
} else {
std::cout << n << " 不是 2 的幂次方" << std::endl;
}
return 0;
}
```
相关问题
案例1:2的幂 给你一个整数n,请你判断该整数是否是2的幂次方举例: n=1输出:yes n=2 输出:yes n=3输出:no
案例1中的问题是关于检查一个整数`n`是否能表示为2的幂次方。要解决这个问题,你可以使用循环或位运算的方式进行判断。这里提供一种简单的C语言代码解决方案:
```c
#include <stdbool.h>
bool isPowerOfTwo(int n) {
if (n <= 0) {
return false; // 非正整数不是2的幂
} else {
return (n & (n - 1)) == 0; // 如果n AND (n-1)的结果为0,说明它是2的幂
}
}
int main() {
int n = 1;
if (isPowerOfTwo(n)) {
printf("yes\n");
} else {
printf("no\n");
}
n = 2;
if (isPowerOfTwo(n)) {
printf("yes\n");
} else {
printf("no\n");
}
n = 3;
if (isPowerOfTwo(n)) {
printf("yes\n"); // 这个例子会输出 "no"
} else {
printf("no\n");
}
return 0;
}
```
这个代码定义了一个名为`isPowerOfTwo`的函数,它接受一个整数`n`,并利用按位与操作(`&`)判断`n`是否只有二进制表示中的最低有效位为1(即n-1不包含额外的1)。如果结果为0,则说明`n`是2的幂。
案例1:2的幂 给你一个整数n,请你判断该整数是否是2的幂次方 举例: n=1输出:yes n=2输出:yes n=3输出:no
案例1:判断一个整数n是否为2的幂次方,可以通过检查其二进制表示中是否有1的数量为1个的情况来确定。如果所有位都是0或1(除了最左边的一个1),那么n就是2的幂。
例如:
- n = 1 (二进制为1) 是2的0次幂(即1 = 2^0)
- n = 2 (二进制为10) 是2的1次幂(即2 = 2^1)
- n = 4 (二进制为100) 是2的2次幂(即4 = 2^2)
如果n不是2的幂,比如n = 3(二进制为11),因为除第一个1外还有额外的1,所以它不是2的幂。
你可以通过循环右移并检查最低位是否一直是1,如果不是,则说明不是2的幂。如果是2的幂,最终会变成1(因为右移会把所有其他位变为0)。以下是简单的Python代码实现:
```python
def isPowerOfTwo(n):
if n <= 0:
return False
while n % 2 == 0:
n //= 2
return n == 1
# 测试示例
print(isPowerOfTwo(1)) # 输出: True
print(isPowerOfTwo(2)) # 输出: True
print(isPowerOfTwo(3)) # 输出: False
```
阅读全文