Power of Four

判断整数是否为4的幂
本文介绍了一种方法来判断一个32位有符号整数是否为4的幂。通过使用循环或递归的方法逐步除以4来检查,同时提供了一种不使用循环的解决方案,利用二进制转换和数学计算来实现。

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;
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值