【问题标题】:Get the number of digits of a power of 2, with large exponents?获得大指数的 2 的幂的位数?
【发布时间】:2020-02-02 12:00:22
【问题描述】:

我正在做以下练习:The number of digits of a power of 2.。声明是:

2的幂的位数是多少?

2 ---> 1 digit 
2 * 2 = 4 ---> 1 digit 
2 * 2 * 2 = 8 ---> 1 digit
  2 * 2 * 2 * 2 = 16 ---> 2 digits
  ... ... ... 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 1024 ---> 4 digits

那么,给定指数,数字的位数是多少 那种力量?

我尝试了以下答案:

import java.math.BigInteger; 
public class Power {
    public static long digit(long exp) {
    System.out.println("exp: "+exp);
    BigInteger pow = BigInteger.valueOf(2).pow((int)exp);
    return String.valueOf(pow).split("").length;
    }
}  

但是它会超时,例如:562078812

我们如何改进这个解决方案?有最快的答案吗?

我也看过:

【问题讨论】:

标签: java string math int pow


【解决方案1】:

最快的答案是使用数学。 2^n 中的位数是 (nlog₁₀2)+1 。 您可以通过简单地返回n * Math.log10(2) + 1 来实现。祝你好运。

【讨论】:

    【解决方案2】:

    在十进制系统中,10 次方 n 中正好有 (n+1) 个数字。

    • 10 次方 1 有 2 个数字。
    • 10 次方 2 有 3 位。
    • 10 次方 3 有 4 位。
    • ...
    • .....
    • 10 次幂 n 有 (n+1) 位。

    这里的诀窍是在“2”的指数中找到十进制位数。

    找到答案的困难方法是实际计算 2 次幂 n,然后计算位数。但是,这种方法需要巨大的计算能力。

    更简单的答案在于 10 和 2 之间的差异。

    如果二进制系统中 2 的幂加 1,那么十进制系统中的数字仅以 log 2 为底以 10 为基础提高!

    对于二进制的 n 次幂的提升,等价的将是 (n *log2_base_10 + 1) 十进制。

    工作解决方案:

    public class Power {
        public static long digit(long exp) {
            return (long) (Math.ceil(exp * Math.log10(2)) + 1);
        }
    
        public static void main(String[] args) {
            long exp = 50000000;
            System.out.println("Number of digits in 2 power " + exp 
                                + " = " + Power.digit(50000000));
        }
    }
    

    输出:

    $ javac Power.java
    $java 电源

    2 次方 50000000 = 15051501 的位数

    【讨论】:

      【解决方案3】:

      使用如下静态方法计算位数。我认为这是更快的方式

      static int countDigits(int n) 
      { 
          return (int)(n * Math.log10(2) + 1); 
      } 
      

      【讨论】:

        猜你喜欢
        • 2020-07-26
        • 2014-07-20
        • 2015-01-08
        • 2015-11-25
        • 1970-01-01
        • 1970-01-01
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多