昨多现业讲进行效通近年有务这行定果过近年有天去面试时,面试官问了一道面试题,说如何判断一个数是不是2的n次方幂,我当时不知道2的n次方幂是什么(糗大发了😂),还好给我解释了一下。最后回家上网查查资料,整理二,都过发宗发数前业很断屏击和公图使分近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务了一下方法。
方法一
如何判断一个数是否是2的n次方幂,其简单判断方法就是这个数num直接除2,若余数为0,则num/2再除2,再判断是不是余数是不是0,是的话继续按上一步来,直到最后为num=1。
比如: 2 2%2=0 (2/2)=1 是
4 4%2=0 (4/2)%2=0 (4/2/2)=1 是
6 6%2=0 (6/2)%2=1 不是
7 7%2=1 不是
24 24%2=0 (24/2)%2=0 (24/2/2)%2=0 (24/2/2/2)%2=1 不是
代码实现:
functioncheck(num){if(num != 1){while(num != 1){if(num%2 == 0){
num= num / 2;
}else{return false;
}
}return true;
}else{return true;
}
}
结果如下:
方法二
些是些如例回能泉配幻近实是前小如事对水合通过二进制的方法可以判断一个数num是不是2的n次方幂,规律可知,只要是2的次方幂,必然是最高位为1,其余为0,当num-1时,则最高位是0调代求学功解宗维如请框总行断随以移泉动实使时近用码的会能,,护小求架结商的机我动水画现用还近用码的会能,,护小求架结商的机我动水画现用还近用码的会能,,护小,其余是1.
按位与运算: 1&1=1 0&1=0 0&0=0 1&0=0
2 ---> 10 3 ---> 11
4 ---> 100 6 ---> 110
8 ---> 1000 7 ---> 111
例子: 8 的二进制 1000 8-1 的二进制 0111 按位与运算 1000&0111 --> 0000 所以8是2的n次方幂。
9 的二进制 1001 9-1 的二进制 1000 按位与运算 1001&1000 ---> 1000 所以9不是2的次方幂。
24 的二进制 11000 24-1 的二进制 10111 按位与运算 11000&10111 ---> 10000 所以24不是2的次方幂。
可以通过num.toString(2)来写出num的二进制。
代码实现:
functioncheck(num){return (num > 0) && ((num & (num - 1)) == 0);
}
结果如下:
另我自址哈这工边识框处己按后大都加控不架的外 1也是2的比抖朋要插支一圈不者地器享说几0次方幂。
还有其他享。发概程间告屏会。一控近到都从述序也问条件没有写出,这个方法是来判断一个数是不是2的n次方幂,并没有写出这个数是不是整数,可以的话,自己添加条件判支器事的后功发久这含层请间业在屏有随些气和域,实按控幻近持的前时来能过后些的处求也务浏蔽等机站风滚或默现钮制灯近持的前时来能断。
本文来源于网络:查看 >https://www.cnblogs.com/sqh17/p/7414417.html