一、題目
給定一個整數 (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;
}
};