python:给1个整数,你怎么判断是否等于2的幂次方?

liftword5个月前 (02-14)技术文章42

最近在某xxxx网站上刷到一个比较简单题目,题目要求不使用循环和递归来实现检查1个整数是否等于2的幂次方,题目如下:

题目的答案如下:

def isPowerofTwo(n):
	z = bin(n)[2:]
	print(bin(n))
	
	if z[0] != '1':
		return False
 	
	for i in z[1:]:
		if i != '0':	
			return False
 	return 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 = 0
 	while True:
		if n == 2 ** num:
			return True
 		else:
			num +=1
 		if num > 31:
			return False

我们使用递归方法:

def isPowerofTwo2(n,num=0):
	if n == 2 ** num:
		return True
	num += 1
	if num > 31:
		return False
	print(num)
	return isPowerofTwo2(n,num)

不知道大家还有什么方法,请评论区指教。


共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

相关文章

在 Python 中将浮点数转换为整数方法指南

在 Python 中将浮点数转换为整数可能看起来很简单,但有一些重要的细微差别需要理解。让我们探讨所有可用的方法、它们的差异以及何时使用每种方法。基本浮点到整数转换方法Python 提供了多种将浮点数...

Python ‘bufferobject.c’整数溢出漏洞

受影响系统:Python python不受影响系统:Python python ˂ 2.7.8描述:BUGTRAQ ID: 70089Python是一种面向对象、直译式计算机程序设计语言。Python...

第1章 整数运算-扩建花圃问题_扩建花园

python500题:扩建花圃问题。猎风老师的习题课。下面看一下扩建花圃的问题。梅山小学有一块长方形的花圃,花圃的长和宽都是整数,长是m米,宽未知。在修建校园的时候把花圃的长增加了n米,此时发现增加出...

百分号%在python中的用法_百分号在python中代表什么

百分号%在python中主要是两个作用:数学运算符号和格式化输出。下文分别详细说明。1、数学运算符号,求余数在整数的除法中,有能整除与不能整除两种情况。所谓余数,余数指整数除法中被除数未被除尽部分,p...

python编程学习系列:求平方根_python编写程序平方根

求平方根:sqrt(x) 返回数字x的平方根。例子:编写一个程序,快速的计算并输出1-20各个数的平方根:import math as m #导入math库并将其重新命名为mx=1 #设置计数器起始值...