Получить число цифр степени 2 с большими показателями? - PullRequest
1 голос
/ 02 февраля 2020

Я делаю следующее упражнение: Количество цифр степени 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

Как мы можем улучшить это решение? Есть ли самый быстрый ответ?

Я также прочитал:

Ответы [ 3 ]

3 голосов
/ 02 февраля 2020

Самый быстрый ответ - использовать математику. Количество цифр в 2 ^ n равно (nlog₁₀2) +1. Вы можете достичь этого, просто вернув n * Math.log10(2) + 1. Удачи.

1 голос
/ 02 февраля 2020

В десятичной системе в 10 разрядах будет ровно (n + 1) цифр n.

  • 10 степень 1 имеет 2 цифры.
  • 10 power 2 имеет 3 цифры.
  • 10 power 3 имеет 4 цифры.
  • ...
  • .....
  • 10 power n имеет (n + 1) цифр.

Трюк здесь найти число десятичных цифр в показателе ' 2 '.

Сложный способ найти ответ состоит в том, чтобы фактически вычислить 2 power n и затем посчитайте количество цифр. Однако этот метод требует огромных вычислительных мощностей.

Более простой ответ заключается в разнице между 10 и 2.

Если в двоичной системе степень 2 возрастает на 1, то в десятичной системе повышаются цифры только по журналу 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 Мощность. java
$ java Мощность

Количество цифр в 2 степени 50000000 = 15051501

0 голосов
/ 02 февраля 2020

Используйте метод stati c, как показано ниже, для вычисления количества цифр. Я думаю, что это более быстрый способ

static int countDigits(int n) 
{ 
    return (int)(n * Math.log10(2) + 1); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...