1. 题目描述
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.Follow up: Could you solve it without loops/recursion?
判断一个数是否为4的n次方。
2. 解题思路
和题目326, 231一样,暂且称这个为会一个全会系列吧。不管是求一个数num是不是x的n次方,统一都可以用一个方法解决,logx(num)=n,n为整数时,那么这个数就是x的n次方。采用换底公式,logx(num) = loga(num)/loga(x)=result,就能求出这个数n,再用Math.abs(result-(int)result),就可以知道这个数是不是一个整数。需要注意的是java中使用原本的log,即以e为底的log函数ln,会出现精度问题,换用log10可以通过测试。
3. Code
public class Solution {
public boolean isPowerOfFour(int num) {
double result = Math.log10(num)/Math.log10(4); // 换底公式求指数
return Math.abs(result-(int)result) == 0; // 判断指数是否为整数
}
}