#6 判断一个数是否为2的n次方
「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次方
运行结果
#6 判断一个数是否为2的n次方的更多相关文章
- 【位运算】判断一个数是否为2的n次方
import java.util.Scanner; /** * 功能:用位运算,判断一个数是否为2的n次方. * 思路:用1做移位操作,然后判断移位后的值是否与给定的数相同. */ public cl ...
- 判断一个数是否是4的n次方
def is_Power_of_four(n): while n and not (n & 0b11): n >>= ) print(is_Power_of_four()) pri ...
- 剑指offer——面试题15.1:判断一个数是否为2的整数次方
#include"iostream" using namespace std; bool IsTwoPower(int n) { )&n); } int main() { ...
- [算法]判断一个数是不是2的N次方
如果一个数是2^n,说明这个二进制里面只有一个1.除了1. a = (10000)b a-1 = (01111)b a&(a-1) = 0. 如果一个数不是2^n, 说明它的二进制里含有多一 ...
- 如何判断一个数是否为素数(zt)
怎么判断一个数是否为素数? 笨蛋的作法: bool IsPrime(unsigned n){ if (n<2) { //小于2的数即不是合数也不是素数 throw 0; ...
- 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面 ...
- pyhton 查找一个数的所有因子 以及 判断一个数是否是质数 两个小脚本
最近看到一个网站, 欧拉计划.挺好玩,都是一些算法题.这是本站:http://projecteuler.net/problems 这个是中文站:http://pe.spiritzhang.com/ 下 ...
- 使用二分查找判断某个数在某个区间中--如何判断某个IP地址所属的地区
一,问题描述 给定100万个区间对,假设这些区间对是互不重叠的,如何判断某个数属于哪个区间? 首先需要对区间的特性进行分析:区间是不是有序的?有序是指:后一个区间的起始位置要大于前一个区间的终点位置. ...
- 海量数据找相同数,高配词,不重复的数,判断一个数是否存在,查询串,不同电话号码的个数,中位数,按照query频度排序,topk
这类题目,首先需要确定可用内存的大小,然后确定数据的大小,由这两个参数就可以确定hash函数应该怎么设置才能保证每个文件的大小都不超过内存的大小,从而可以保证每个小的文件都能被一次性加载到内存中. 1 ...
随机推荐
- BZOJ_2212_[Poi2011]Tree Rotations_线段树合并
BZOJ_2212_[Poi2011]Tree Rotations_线段树合并 Description Byteasar the gardener is growing a rare tree cal ...
- Python数据结构应用1——Stack
Reference: Problem Solving with Algorithms and Data Structures, Release 3.0 自学一下数据结构,学完之后刷leetcode,使 ...
- Jenkins使用教程
1 软件安装 1.1 运行环境 1.1.1 Maven的安装 1.1.2 Git的安装 1.1.3 Tomcat的安装 1.2 安装Jenkins 1.2.1 msi和war包安装2 ...
- 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...
- Synchronized锁在Spring事务管理下,为啥还线程不安全?
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 大年初二,朋友问了我一个技术的问题(朋友实在是好学, ...
- 小步快跑的公司可以最简化操作直接通过log4net将日志写入ElasticSearch
很多小步快跑的公司,开发人员多则3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期 项目不稳定,bug又多,每次都跑到生产去找日志 ...
- 【开发记录】如何在B/S项目中使用中国天气的实时天气功能
好久没有更新我的博客了,正好手头有一个比较合适的项目经验可以分享出来,就是这个如何使用中国天气的天气预报功能,也正好做个项目经验记录. 功能需求 这个功能需求比较简单,就是想在网页端显示实时天气数据. ...
- SQL Server内幕之数据页
数据页是包含已添加到数据库表中的用户数据的结构. 如前所述, 数据页有三种, 每个都以不同的格式存储数据. SQL server 有行内数据页.行溢出数据页和 LOB 数据页. 与 SQL serve ...
- 设计模式 | 工厂方法模式(factory method)
定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 结构:(书中图,侵删) 一个工厂的抽象接口 若干个具体的工厂类 一个需要创建对象的抽象接口 若干个 ...
- 项目分层-----MVC
MVC设计模式:modle层,view层,controller层 以前学习的servlet其实就是一个java类,或者说经过规范的java类,实际进行跳转时,还是要在web.xml文件中配置才能正常跳 ...