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

  • 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
    }
    

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BQW_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值