Прогнозирование количества цифр умножения - PullRequest
8 голосов
/ 04 июля 2011

Мне нужно найти количество цифр очень больших умножений (около 300 цифр каждая).Мне было интересно, если есть хитрость, чтобы предсказать количество цифр, которые продукт будет без фактического выполнения расчета.

Ответы [ 2 ]

22 голосов
/ 04 июля 2011

Количество цифр может быть вычислено точно по округленной (уменьшенной) сумме основание 10 log двух мультипликаторов плюс 1, следующим образом:

public static void main(String[] args) {
    DecimalFormat f = new DecimalFormat("#");
    double num1 = 12345678901234567890d;
    double num2 = 314159265358979d;

    // Here's the line that does the work:
    int numberOfDigits = (int) (Math.log10(num1) + Math.log10(num2)) + 1;

    System.out.println(f.format(num1) + " * " + f.format(num2) + " = " + 
        f.format((num1 * num2)) + ", which has " + numberOfDigits + " digits");
}

Выход:

12345678901234567000 * 314159265358979 = 3878509413969699000000000000000000, which has 34 digits

Это будет работать для произвольно больших чисел.

6 голосов
/ 04 июля 2011

Ответ Кристобалито в значительной степени получает его. Позвольте мне сделать «о» более точным:

Предположим, что первое число имеет n цифр, а второе - m. Наименьшее, что они могут быть, это 10 ^ (n-1) и 10 ^ (m-1) соответственно. Этот продукт будет наименьшим, и может быть 10 ^ (m + n-2), что составляет m + n-1 цифр.

Максимально возможное значение - 10 ^ n - 1 и 10 ^ m - 1 соответственно. Этот продукт будет максимальным, который может быть, и будет 10 ^ (n + m) - 10 ^ n - 10 ^ m + 1, который имеет не более m + n цифр.

Таким образом, если вы умножаете n-значный номер на m-значный номер, продукт будет иметь либо m + n-1, либо m + n цифр.

Аналогичная логика справедлива для других баз, таких как база 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...