python:给1个整数,你怎么判断是否等于2的幂次方?
最近在csdn上刷到一个比较简单的题目,题目要求不使用循环和递归来实现检查1个整数是否等于2的幂次方,题目如下:
题目的答案如下:
def isPowerofTwo(n):z = bin(n)[2:]print(bin(n))if z[0] != '1':return Falsefor i in z[1:]:if i != '0': return Falsereturn True
我们来执行几个检查看下结果:
print(isPowerofTwo(2))
print(isPowerofTwo(8))
print(isPowerofTwo(9))
结果如下:
0b10
True
0b1000
True
0b1001
False
确实当时没有想到会使用这种方式来检查,虽然也知道bin函数,但就是想不到这种方法,看来还是修炼不够,没有达到乾坤大挪移的功力。
这里主要是使用我们之前文章(一文学习python的编码和解码)提到的将10进制数转成2进制数的函数bin,比如bin(2)的结果是0b10,而bin(9)的结果是0b1001,那么从下图我们可以知道一个整数如果恰好是2的幂次方,2进制数的第1位数字一定是1,而其他位的数字一定是0,所以才会有了上述函数的判断逻辑。
我们使用循环方法:
def isPowerofTwo1(n):num = 0while True:if n == 2 ** num:return Trueelse:num +=1if num > 31:return False
我们使用递归方法:
def isPowerofTwo2(n,num=0):if n == 2 ** num:return Truenum += 1if num > 31:return Falseprint(num)return isPowerofTwo2(n,num)
不知道大家还有什么方法,请评论区指教。
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。