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

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)

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

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

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

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

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

http://www.lryc.cn/news/443200.html

相关文章:

  • Centos7安装gitlab-ce(rpm安装方式)
  • Flutter 获取手机连接的Wifi信息
  • 誉龙视音频 Third/TimeSyn 远程命令执行复现
  • ATMEGA328P芯片引脚介绍
  • 现代前端构建工具对比:Vue CLI、Webpack 和 Vite
  • 代码随想录算法训练营第三九天| 198.打家劫舍 213.打家劫舍II 337.打家劫舍 III
  • 阿里云AI基础设施全面升级,模型算力利用率提升超20%
  • Debezium日常分享系列之:将容器镜像移至 quay.io
  • 基于TCP实现聊天
  • 基于JavaSwing实现的酒店管理系统
  • 网络基础,协议,OSI分层,TCP/IP模型
  • CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)
  • 【OSS安全最佳实践】降低因账号密码泄露带来的未授权访问风险
  • 视频存储EasyCVR视频监控汇聚管理平台设备录像下载报错404是什么原因?
  • 在Spring项目中,两个实用的工具(生成类与映射文件、API自动生成)
  • C#基础(16)实践:学生成绩管理系统
  • git常用命令(patch补丁和解决冲突)
  • 数模方法论-整数规划
  • 【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`
  • 2024年华为杯-研赛F题论文问题一二讲解+代码分享
  • 代码随想录训练营第34天|dp前置转移
  • 乐观锁、悲观锁
  • Java客户端SpringDataRedis(RedisTemplate使用)
  • wsl2桥接网络 ubuntu到弃坑到又跳坑
  • WIFI路由器的套杆天线简谈
  • 希尔排序(C语言实现)
  • LLVM 中的Value、User、Use设计
  • C++智能指针入门教程(C++11)
  • 常用工具推荐!分享7款AI论文修改软件工具网站
  • 怎么解除BitLocker对磁盘的加密?