1. 2 的幂次方
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。
2 的 N 次方的二进制必然为 10,100,1000,1000…0 类似的,所以只需要将该整数的二进制表示法与它减 1 的二进制表示法进行与操作,结果为 0 的必然为 2 的 N 次方。
class Solution {
public:bool isPowerOfTwo(int n) {return n>0 && (n&(n-1))==0; }
};
2. 3 的幂次方——循环法
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
一个数是 3 的 N 次方,那么该数字一定可以被 3 整除,被 3 整除后不断循环除以 3,直到该数字等于 1 时,返回 true,如果不为 1 则返回 false。
class Solution {
public:bool isPowerOfThree(int n) {if (n == 0){return false;}while (n%3==0){n /= 3;}return n==1 ? true:false;}
};
3. 4 的幂次方——递归法
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4^x
class Solution {
public:bool isPowerOfFour(int n) {if (n == 0){return false;}else if (n == 1){return true;}else{return (n%4)==0 ? isPowerOfFour(n/4):false;}}
};