#6 判断一个数是否为2的n次方
2019-02-25 16:14:24来源:博客园 阅读 ()
「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 (推荐)
【解答】
方法一:
1 #!/Users/minutesheep/.pyenv/shims/python 2 # -*- coding: utf-8 -*- 3 4 5 def isPower(n): 6 ''' 7 判断是否为2的n次方 8 ''' 9 try: 10 n = str(bin(n)) 11 if n.count('1') == 1: 12 return print('是2的n次方') 13 return print('不是2的n次方') 14 except: 15 return print('错误:只接收数字') 16 17 18 if __name__ == '__main__': 19 test_num = 2048 20 isPower(test_num)
是2的n次方
方法二:
1 #!/Users/minutesheep/.pyenv/shims/python 2 # -*- coding: utf-8 -*- 3 4 5 def isPower(n): 6 ''' 7 判断是否为2的n次方 8 ''' 9 try: 10 if n&(n-1) == 0: 11 return print('是2的n次方') 12 return print('不是2的n次方') 13 except: 14 return print('错误:只接收数字') 15 16 17 if __name__ == '__main__': 18 test_num = 2048 19 isPower(test_num)
是2的n次方
原文链接:https://www.cnblogs.com/minutesheep/p/10422761.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Python数据挖掘——基础知识
下一篇:Python爬取地图瓦片
- python3 之 判断闰年小实例 2019-08-13
- 输入某年某月某日,判断这一天是这一年的第几天 2019-07-24
- Python-03-流程控制 2019-07-24
- Python自定义一个数组类,支持数组之间的四则运算和其他常见 2019-05-22
- 【Python实践-8】和为S的两个数字 2019-04-30
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash