问题3:检测2的幂次
问题描述:
检测一个整数n是否为2的幂次。
问题示例:
n=4,返回true;n=5,返回false
解题思路:
1、采用utf-8编码格式,数据以二进制形式保存,从n=1开始,每次左移一位数,相当于对数值进行乘以2的操作。每次左移后和数值n相比较,若相等则该数是2的幂次。但是,该方法受限于内存,最多计算2的31次幂。
#采用UTF-8编码格式
#参数n是一个整数
#返回true或者false
class Solution3:
def checkPower0f2(self,n):
ans = 1
for i in range(31):
if ans == n:
return True
ans = ans << 1
return False
n=12
print("初始值:",n)
soluttion = Solution3()
print("结果:",soluttion.checkPower0f2(n))
2、常规思路,对数值进行除以2的循环操作,若最后结果为1,则n是2的幂次,则返回True,否则,返回False。
代码如下:
class Solution3_pow:
def checkPower0f2_2(self,n):
ans = 1
flag = n
while flag >= 1:
if flag == 1:
return True
else:
flag = flag / 2.0
return False
n=16
print("初始值:",n)
soluttion = Solution3_pow()
print("结果:",soluttion.checkPower0f2_2(n))