2的幂

作者: 讷兔 | 来源:发表于2015-07-06 16:49 被阅读0次

问题来源:Power of Two

即判断一个整数是否为2的幂,注意这里的整数有可能是负整数,某些针对正整数的算法并不适用。以下是几种通过了测试的代码(C语言)以及在leetcode上测试1108个用例花费的时间。

  1. 除法
    不断对输入的整数做除法,如果最后的商是1,那么这个整数是2的幂;如果商在变为1之前已经是一个奇数(如7/2为3),那么这个整数不是2的幂。代码如下:
    bool isPowerOfTwo(int n) {
    while ((n % 2 == 0) && n > 1)
    n /= 2;
    return (n == 1);
    }
    耗时4ms。
  2. 右移
    这种算法和除法是相等的,除以2实际上相当于右移 1 bit,检查一个二进制数是否为奇数和检查它的最后一位是否为 1 相同。代码如下:
    bool isPowerOfTwo(int n) {
    while (((n & 1) == 0) && n > 1) /* While n is even and > 1 /
    n >>= 1;
    return (n == 1);
    }
    耗时同样为4ms。
    3.数“1”
    这种想法最为自然,因为2的幂表示为二进制都是1后面加上相应数量的0(如32的二进制表示为100000),如果二进制里出现了多于一个的“1”这个整数一定不是2的幂。代码如下:
    bool isPowerOfTwo(int x) {
    unsigned int numberOfOneBits = 0;
    while(x && numberOfOneBits <=1)
    {
    if ((x & 1) == 1) /
    Is the least significant bit a 1? /
    numberOfOneBits++;
    x >>= 1; /
    Shift number one bit to the right /
    }
    return (numberOfOneBits == 1); /
    'True' if only one 1 bit */
    }
    耗时8ms。
    参考资料:Ten Ways to Check if an Integer Is a Power Of Two in C

相关文章

  • 2018-10-21

    知识点1:幂的运算 (1)同底数幂的乘法法则: 同底数幂相乘,底数不变,指数相加 (2)幂的乘方法则: 幂的乘方,...

  • 2的幂

    问题来源:Power of Two 即判断一个整数是否为2的幂,注意这里的整数有可能是负整数,某些针对正整数的算法...

  • 2的幂

    题目描述 难度级别:简单 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 1: 输入: 1输出: ...

  • 分治法的常见问题

    计算x的n次幂 朴素算法:xxx...... 分治算法: n为偶数:x的n/2次幂*x的n/2次幂 n为奇数:x的...

  • 郑州轻工业大学oj题解(c语言)-1005: 整数幂

    1005: 整数幂 题目描述 输入3个整数,输出它们的1次幂、2次幂和3次幂。 输入 输入3整数,用空格隔开。 输...

  • 判断一个数是否是2的n次幂

    解题思路 1:如何得到2的n次幂,2*2*2 2:将传入的数据进行“循环除以2”直到该数据=2那么该数据就是2的次幂

  • HashMap扩容时为何每次扩容为原来的2倍

    初始容量为2的幂幂数,扩容后的容量也是2的幂数,则元素在新表中的位置要么不动,要么满足新位置=原长度+原位置。原因...

  • 一口气说出8种幂等性解决重复提交的方案,面试官懵了!(附代码)

    1.什么是幂等 在我们编程中常见幂等 1)select查询天然幂等 2)delete删除也是幂等,删除同一个多次...

  • 接口幂等性书目录

    1.幂等性定义 1.1 数学定义 1.2 HTTP规范的定义 2. 何种接口提供幂等性 2.1 HTTP支持幂等性...

  • 服务幂等

    1.读幂等 1.1 select 天然幂等 2.写幂等 2.1 insert 请求方携带唯一ID 2.2 upda...

网友评论

      本文标题:2的幂

      本文链接:https://www.haomeiwen.com/subject/nmmyqttx.html