当前位置: 首页 > article >正文

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

最近在csdn上刷到一个比较简单的题目,题目要求不使用循环和递归来实现检查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)

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

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

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

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

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


http://www.kler.cn/news/314444.html

相关文章:

  • java.nio.ByteBuffer的 capacity, limit, position, mark
  • 如何打造高效的远程开发团队:最佳实践与挑战
  • 大话C++:第11篇 类的定义与封装
  • Redis——redispluspls库通用命令以及String类型相关接口使用
  • 每日一题--打印闰年
  • 如何使用 Python 连接 MySQL 数据库?什么是 ORM(对象关系映射),如何使用
  • fasterRCNN模型实现飞机类目标检测
  • 果蔬识别系统架构+流程图
  • Hadoop的安装
  • JVM 调优篇7 调优案例2-元空间的优化解决
  • 使用Diskgenius系统迁移
  • 分页插件、代码生成器
  • C#中DataGridView 的 CellPainting 事件的e.Handled = true
  • 银河麒麟V10系统崩溃后的处理
  • 富文本编辑器wangEdittor使用入门
  • string类的模拟实现以及oj题
  • Linux·权限与工具-git与gdb
  • Puppet 部署应用(Puppet deployment application)
  • 《他们的奇妙时光》圆满收官,葛秋谷新型霸总获好评
  • 初始Vitis——ZYNQ学习笔记1
  • 探索微软Copilot Agents:如何通过Wave 2 AI彻底改变工作方式
  • 伊犁linux 创建yum 源过程
  • Java面向对象编程
  • Ubuntu设置笔记本电脑合盖时不挂起
  • el-select组件:选择某个选项触发查询
  • 基于R语言的统计分析基础:使用键盘输入数据
  • charles抓包flutter
  • 数据结构之线性表——LeetCode:328. 奇偶链表,86. 分隔链表,24. 两两交换链表中的节点
  • 基于React+JsonServer+Antddesign的读书笔记管理系统
  • 4.使用 VSCode 过程中的英语积累 - View 菜单(每一次重点积累 5 个单词)