#6 判断一个数是否为2的n次方】的更多相关文章

「ALBB面试题」 [题目] 如何判断一个数是否为2的n次方 [题目分析] 看到这种题,相信大家第一反应就是循环除2,这样做肯定是可以得出结果的:但是这种做法无疑大大增加了计算机的运行时间,一个非常大的数字可能会让计算机内存溢出,有没有更好的解决方式呢?有!如果你对数字2敏感,那么一定会想到二进制方法,20=0b1.21=10.22=0b100.23=0b1000......通过找规律发现,只要是2的n次方,它的二进制表示形式中1只有一个.所以本题转换为判断一个数字的二进制形式中1是否只有一个.…
import java.util.Scanner; /** * 功能:用位运算,判断一个数是否为2的n次方. * 思路:用1做移位操作,然后判断移位后的值是否与给定的数相同. */ public class Main3 { public boolean isPower(int n) { if (n < 1) { return false; } int m = 1; while (m < n) { m = m << 1; } if (m == n) { return true; }…
def is_Power_of_four(n): while n and not (n & 0b11): n >>= ) print(is_Power_of_four()) print(is_Power_of_four()) print(is_Power_of_four()) print(is_Power_of_four())…
#include"iostream" using namespace std; bool IsTwoPower(int n) { )&n); } int main() { int n; while(cin>>n) { ) { cout<<"no"<<endl; continue; } if(IsTwoPower(n)) cout<<"yes"<<endl; else cout&l…
如果一个数是2^n,说明这个二进制里面只有一个1.除了1. a  = (10000)b a-1 = (01111)b a&(a-1) = 0. 如果一个数不是2^n, 说明它的二进制里含有多一个1. a = (1xxx100)b a-1=(1xxx011)b 那么 a&(a-1)就是 (1xxx000)b, 而不会为0. 所以可以用这种方法判断一个数是不2^n.…
怎么判断一个数是否为素数? 笨蛋的作法: bool IsPrime(unsigned n){    if (n<2)    { //小于2的数即不是合数也不是素数    throw 0;    }    for (unsigned i=2;i<n;++i)    { //和比它小的所有的数相除,如果都除不尽,证明素数        if (n%i==0)        {//除尽了,则是合数            return false;        }    }    return tr…
腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?  这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面试的时候我听面试官问其他人了.我不是故意的...     方案1:申请512M的内存,一个bit位代表一个unsigned int值.读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在.     方案2: 因为2^32为40亿多,所以给定一个数…
最近看到一个网站, 欧拉计划.挺好玩,都是一些算法题.这是本站:http://projecteuler.net/problems 这个是中文站:http://pe.spiritzhang.com/ 下面贴两个小脚本,低端玩具 1.找出一个数的所有因子: #encoding:utf-8 import math def yinzi(n): list_yinzi = [] if n <= 2: return list_yinzi for i in range(2, int(math.sqrt(n))…
一,问题描述 给定100万个区间对,假设这些区间对是互不重叠的,如何判断某个数属于哪个区间? 首先需要对区间的特性进行分析:区间是不是有序的?有序是指:后一个区间的起始位置要大于前一个区间的终点位置.如:[0,10],[15,30],[47,89],[90,100]…..就是有序的区间[15,30],[0,10],[90,100],[47,89]……就是无序的区间 其次,区间是不是连续的?连续是指:后一个区间的起始位置 比 前一个区间的终点位置大1,连续的区间一定是有序的.如:[0,10],[1…
这类题目,首先需要确定可用内存的大小,然后确定数据的大小,由这两个参数就可以确定hash函数应该怎么设置才能保证每个文件的大小都不超过内存的大小,从而可以保证每个小的文件都能被一次性加载到内存中. 1. 如何从大量的url中找到相同的url? 题目描述:给定a.b两个文件,各存放50亿个url,每个url各占64B,内存限制是4GB,请找出a.b两个文件共同的url. 分析:50亿个url,50亿*64 = 5GB*64=320GB,内存大小4GB,因此不可能一次性把所有的url都加载到内存中处…