Power of Four

来源:互联网 发布:linux yum安装snmp 编辑:程序博客网 时间:2024/05/21 16:57

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?

Tags

Bit Manipulation

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

*** Non-positive number is not a power of n

Using Loop/Recursion

/** * @param {number} num * @return {boolean} */var isPowerOfFour = function (num) {    while (num > 1) {        if (num % 4 === 0) {            num = num / 4;        } else {            return false;        }    }    if (num === 0 || num < 0) {        return false;    }    if (num === 1) {        return true;    }};/* * Summarize * A 4 byte int range: * -2,147,483,648 to 2,147,483,647 */


Follow up: without loop solution

Let's find out the rules

Decimal => Binary

1 => 0000 0000 0000 0000 0000 0000 0000 0001

2 => 0000 0000 0000 0000 0000 0000 0000 0010

3 => 0000 0000 0000 0000 0000 0000 0000 0011

4 => 0000 0000 0000 0000 0000 0000 0000 0100

...

8 => 0000 0000 0000 0000 0000 0000 0000 1000

...

We can easily tell that 

if the number is multiple of 4, its binary gonna be 100 exponentiation.

So transform the number to binary and get the log of 100 to see whether it returns an int.

/** * @param {number} num * @return {boolean} */var isPowerOfFour = function(num) {    if(num <=0 ) {        return false;    }    if(num === 1) {        return true;    }        var log100 = Math.log(parseInt(num.toString(2)))/Math.log(100);    return Math.abs(Math.round(log100) - log100) < 1e-10 ? true : false;};



0 0