一、題目描述
給定一個整數,寫一個函數來判斷它是否是 3 的冪次方。
示例 1:
輸入: 27
輸出: true
示例 2:
輸入: 0
輸出: false
示例 3:
輸入: 9
輸出: true
示例 4:
輸入: 45
輸出: false
進階:
你能不使用循環或者遞歸來完成本題嗎?
二、題解思路
- 循環求冪然後比較大小,等於的時候是是 3 的冪次方,不等於或者大於則不是。
- n 大於0,並且int類型的最大3 的冪次方爲1162261467,則n 應該是被取餘爲0的。
三、程序實例
class Solution {
public:
bool isPowerOfThree(int n)
{
return n > 0 && 1162261467%n == 0;
}
bool isPowerOfThree1(int n) {
int i = 0;
double a = 0;
while((a = pow(3, i++)) <= n)
{
if(a == n)
return true;
else if(a <= n / 7) // 提升效率,太小了則多加一次冪,沒研究過什麼值的時候最好
i++;
}
return false;
}
};