zoukankan      html  css  js  c++  java
  • 不使用循环或递归判断一个数是否为3的幂(leetcode 326)

    326. Power of Three
    Given an integer, write a function to determine if it is a power of three. Follow up: Could you do it without using any loop / recursion?

    看到这种题目,第一想法就是用递归或者循环来做,但是题目要求了不能用这种方法来做,所以只能另想他法。

    假设输入一个数 n,如果 n 是3的幂,那么 3^x = n, 即 x = log10(n) / log10(3), 这里使用了换底公式。那么这样的话就好办了,如果 n 是3的幂,那么x肯定是一个整数,

    那么接下来只需要判断 x 是不是整数即可。

    判断 x 为整数有两种方法:

    1.将 x 强转为int类型,计算小数位是否为0

    bool isPowerOfThree(int n) {
        double ret = log10(n) / log10(3);
        return ret == (int)ret;
    }

    2.使用fmod函数

    bool isPowerOfThree(int n) {
        double ret = log10(n) / log10(3);
        return n > 0 && fmod(ret, 1) == 0;
    }

    则此题得解。

    我在讨论区也见到一些别的解法,顺便在这里摘录一下(这几种方法的原理都是一样的,因为3是质数,所以3的幂中最大的整数如果能整除 n,那么n = 3 * ... * 3)

    bool isPowerOfThree(int n) {
        return n>0 && 1162261467%n==0;    // 其中的1162261467是3的幂中最大的整数
    }
    bool isPowerOfThree(int n) {
        int maxPowerOfThree = (int)pow(3, (int)(log(INT_MAX)/log(3)));
        return n>0 && maxPowerOfThree%n==0;
    }
    bool isPowerOfThree(int n) {
        return n>0 && (int)pow(3, 19)%n==0;
    }
  • 相关阅读:
    redis未授权访问简单总结
    CORS跨域资源共享漏洞初探
    Mysql UDF提权方法
    hacknos-player靶机渗透
    深入理解Java虚拟机-类加载连接和初始化解析
    Dnslog盲注
    让服务器使用密钥
    自动备份站点
    自动放行nginx后台访问ip
    mysql增备
  • 原文地址:https://www.cnblogs.com/zhuangshq/p/5683928.html
Copyright © 2011-2022 走看看