现在我们要写一个代码判断一个数是否是2的n次方
这里有一种很简单:如果一个数是2的n次方,那么只要对这个数一直除以2;最后一定会得到1
也就是说,如果一个数是2的n次方,一直除以2一定会得到2
所以我们可以设置一个while循环,让需要判断的数字一直除以2,如果结果是1,那么这个数就是2
的n次方
代码如下:
#include<stdio.h>
int main()
{
float i = 0;
scanf("%f", &i);
while (1)
{
i = i / 2;
if (i == 1)
{
printf("这个数是2的n次方\n");
break;
}
}
return 0;
}
这里还有一种方法就是可以用位运算的方法
大家想一下便可发现,如果一个数是2的n次方,那么它的二进制序列一定只有一个1,就比如2,第二个位是1,4,第三个位是1,16,第五个位是1,其它位都是0
利用这个特点,我们可以写一个循环遍历二进制序列的每一位,并统计1的个数,如果只有一个1,那么说明这个数就是2的n次方
#include<stdio.h>
int Number(int i)
{
int count = 0;
while (i)
{
i = i & (i - 1);
count++;
}
return count;
}
int main()
{
int i = 0;
scanf("%d", &i);
int ret=Number(i);
if (ret == 1)
{
printf("这个数是2的n次方\n");
}
else
{
printf("这个数不是2的n次方\n");
}
return 0;
}