一、题目
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16 输出: true
示例 2:
输入: 5 输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
二、题解思路
- 题解思路1(递归):根据给定的整数,先判断其是否为0、1,若不是,则进行求余和除4取整判断,递归操作。
- 题解思路2(循环):先判断num是否是0、1,如果不是则进行循环体,定义一个中间变量每次都自乘4,然后判断是否和num相等,如果相等则返回true,否则一直判断,如果当中间变量的值超过了num还没有输出true,则输出flase。
三、代码实现
- C++代码实现题解思路1:
class Solution {
public:
bool isPowerOfFour(int num)
{
if(num == 1) //当num等于1的时候,其是4的0次幂
return true;
else if(num == 0) //当num等于0的时候,其显然不是4的幂
return false;
else
{
if(num%4 == 0 && num/4 != 0) //num除4求余为0,但除4取整还不为0,故进行取整操作
num /= 4;
else if(num%4 == 0 && num/4 == 0) //num除4求余为0,且除4取整为0,则判断结束,为4的幂
return true;
else
return false;
}
return isPowerOfFour(num); //递归
}
};
- C++代码实现题解思路2
class Solution {
public:
bool isPowerOfFour(int num)
{
if(num == 0) //0的情况
return false;
if(num == 1) //1的情况
return true;
long long count = 1; //中间变量
while(count < num)
{
count *= 4; //自乘4
if(count == num)
return true;
}
return false;
}
};