全屏浏览切换毒局 判断一个int型整数是否是2的n次方,如果是则输出n值,否则输出NO!。输入格式: 输入若干个整数,以空格或换行间隔。输出格式: 对每一个整数,在一行中输出n值或"NOI"输入样例1C语言
时间: 2024-11-13 07:25:35 浏览: 16
这是一个关于二进制表示和判断的问题。在C语言中,你可以通过将数字转换成二进制字符串,并检查该字符串是否只包含一位“1”(即最高位),来确定它是否是2的幂次方。下面是一个简单的C程序示例:
```c
#include <stdio.h>
#include <math.h>
void isPowerOfTwo(int num) {
if (num <= 0) {
printf("NO\n");
} else if (num == 1) {
printf("1\n");
} else {
int n = log2(num);
if (n * pow(2, n) == num) {
printf("%d\n", n);
} else {
printf("NO\n");
}
}
}
int main() {
int num;
while (scanf("%d", &num) != EOF) {
isPowerOfTwo(num);
}
return 0;
}
```
这个程序首先判断输入的数字是否小于等于0,因为负数和0不是2的幂次方。如果数字是1,则直接输出1。对于其他正数,通过计算其以2为底的对数(`log2(num)`),然后验证结果是否满足2的幂关系,如果满足则输出n,否则输出NO。
阅读全文