美文网首页
快速判断x的幂——x进制法 2020-07-27(未允禁转)

快速判断x的幂——x进制法 2020-07-27(未允禁转)

作者: 9_SooHyun | 来源:发表于2020-07-27 20:12 被阅读0次

    快速判断x的幂——x进制法

    1.快速判断一个数是否为2的幂

    思路:
    如果一个数是2的幂,那么它的二进制数一定只含有一个1,反过来也成立
    快速判断一个数是否为2的幂,只需要把它写成二进制,然后获取1出现的次数
    如果1只出现一次,那么必然有 x & (x-1) == 0,必然x是2的幂
    因此,通过表达式 x > 0 and x & (x-1) == 0 即可快速判断2的幂

    2.快速判断一个数是否为4的幂

    思路1:
    如果一个数是4的幂,那么它一定是2的偶数次幂,也就是对应的二进制数从右往左数,只奇数位置上出现且仅出现一个1

    以下为go语言版,num为32位有符号整数

    func isPowerOfFour(num int) bool {
        // 2的偶数次幂
        // 把这个数转换为二进制,只在奇数位置上存在一个1,其他全是0
        var v int
        var one_cnt int = 0
        for i:= 1; i < 33; i ++ {
            v = num & 1
            if i % 2 == 0 {
                if v != 0 {
                    return false
                }
            }else {
                if v == 1 {
                    one_cnt ++
                }
            }
            num = num >> 1
        }
        return one_cnt == 1
    }
    

    思路2:
    把nums变成一个4进制数,如果只出现一个1,其他都是0,则是4的幂

    func isPowerOfFour(num int) bool {
        one_cnt := 0
        var m int
        for num != 0 {
            // m指求mod,得到4进制数的digit
            m = num % 4
            num = num / 4
            if m > 1 {
                return false
            }else if m == 1{
                one_cnt ++
            }
        }
        return one_cnt == 1
    }
    

    3.小结

    把一个数num转换为x进制,就是求num的【x幂多项式】表达。如果这个x幂多项式只有一项,那么num必然是x的幂

    相关文章

      网友评论

          本文标题:快速判断x的幂——x进制法 2020-07-27(未允禁转)

          本文链接:https://www.haomeiwen.com/subject/ewstrktx.html