【LeetCode】231,326,342_2的幂、3的幂和4的幂

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bqw18744018044/article/details/89062749
  • 2的幂

  1. 题目描述

    给定一个整数,编写一个函数来判断它是否是2的幂次方。

  2. 思路

    给定一个二进制数(例如1100),将该数减1为1011,将这两个数按位“与”,即1100&1011得到的结果为1000。总结该规律得到:设存在数n,那么n&(n-1)的结果相当于将n对应的二进制数最右边的1变为0

    再来看2的幂次方在二进制上的规律:若某个数是2的幂次方,那么其2进制表示中就只会存在1个1,其余均为0;

    分析上面的结果,如果对于某个数n,如果该数是2的幂次方,那么使用n&(n-1)去掉其最右端的1后必为0,否则为1;

  3. C++实现
    bool isPowerOfTwo(int n) {
       if(n<=0)return false;
       return (n&(n-1))==0;
    }
    
  • 3的幂

  1. 题目描述

    给定一个整数,编写一个函数来判断它是否是3的幂次方。

  2. 思路

    如果n是3的幂次方法,那么必然是一个整数,为了方便计算有

  3. C++实现
    bool isPowerOfThree(int n) {
       double tem = log10(n) / log10(3);
       return (tem - (int)(tem)) == 0?true:false;
    }
    
  • 4的幂
  1. 题目描述

    给定一个整数,编写一个函数来判断它是否是4的幂次方。

  2. 思路

    首先如果一个数是4的幂次方,那么它一定是2的幂次方。其次,如果一个数是4的幂次方,该数的二进制表示中有且仅有一个1,而且这个1在奇数位置上。

  3. C++实现
    bool isPowerOfFour(int num) {
       if(num<0||num&(num-1))return false;//判断是否是2的幂次方
       return num&0x55555555;//如果奇数位上没有1则结果为0
    }
    

 

猜你喜欢

转载自blog.csdn.net/bqw18744018044/article/details/89062749