「ALBB面试题」

【题目】

如何判断一个数是否为2的n次方

【题目分析】

看到这种题,相信大家第一反应就是循环除2,这样做肯定是可以得出结果的;但是这种做法无疑大大增加了计算机的运行时间,一个非常大的数字可能会让计算机内存溢出,有没有更好的解决方式呢?有!如果你对数字2敏感,那么一定会想到二进制方法,20=0b1、21=10、22=0b100、23=0b1000......通过找规律发现,只要是2的n次方,它的二进制表示形式中1只有一个。所以本题转换为判断一个数字的二进制形式中1是否只有一个。那么该如何统计呢?

方法一:将其转换为字符串,之后统计1的个数

方法二:再仔细观察,20-1=0、21-1=0b01、22-1=0b011、23-1=0b0111......,得到规律:如果一个数字i为2的n次方,则 i&(i-1)=0 (推荐)

【解答】

方法一:

 #!/Users/minutesheep/.pyenv/shims/python
# -*- coding: utf-8 -*- def isPower(n):
'''
判断是否为2的n次方
'''
try:
n = str(bin(n))
if n.count('') == 1:
return print('是2的n次方')
return print('不是2的n次方')
except:
return print('错误:只接收数字') if __name__ == '__main__':
test_num = 2048
isPower(test_num)

程序源代码

是2的n次方

运行结果

方法二:

 #!/Users/minutesheep/.pyenv/shims/python
# -*- coding: utf-8 -*- def isPower(n):
'''
判断是否为2的n次方
'''
try:
if n&(n-1) == 0:
return print('是2的n次方')
return print('不是2的n次方')
except:
return print('错误:只接收数字') if __name__ == '__main__':
test_num = 2048
isPower(test_num)

程序源代码

是2的n次方

运行结果

最新文章

  1. Raspberry Pi 3 --- GPIO control
  2. malloc原理和内存碎片
  3. Android android:gravity属性介绍及效果图
  4. jquery.ajax 跨域请求webapi,设置headers
  5. ajax提交含有html数据时的处理方法
  6. spark MapOutputTrackerMaster
  7. 关于js中this的疑问
  8. Emacs安装auto-complete
  9. C++ 继承之虚继承与普通继承的内存分布
  10. 【模拟】HDU 5762 Teacher Bo
  11. SQL 处理空值
  12. [随笔]利用云虚拟机和学校VPN实现校外访问校内站点(反向代理)
  13. 再叙Java反射
  14. springAOP之代理
  15. xpath使用方法
  16. 001-ADO.NET
  17. 【Python学习】yield send我就说这么多
  18. Linux配置中文输入法(搜狗输入法)
  19. 2018-02-27 "Literate Programming"一书摘记之一
  20. css经典布局—Sticky footers布局

热门文章

  1. BZOJ_4590_[Shoi2015]自动刷题机_二分答案
  2. Resnet论文翻译
  3. java代码之美(12)---CollectionUtils工具类
  4. Scala 编码习惯
  5. Spark2.4.0伪分布式环境搭建
  6. LeetCode算法题-Subdomain Visit Count(Java实现)
  7. 从壹开始微服务 [ DDD ] 之十一 ║ 基于源码分析,命令分发的过程(二)
  8. TensorFlow从1到2(三)数据预处理和卷积神经网络
  9. 我为什么放弃MySQL?最终选择了MongoDB
  10. Java消息系统简单设计与实现