Как обрабатывать вычисления с действительно большими числами на java? - PullRequest
0 голосов
/ 20 апреля 2020

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

Формат файла выглядит следующим образом:

3 //number of tests
28347823734 /*argument 1 of test 1*/ 78353845787 /*argument 2 of test 1*/
63747289347 /*argument 1 of test 2*/ 242489983758 /*argument 2 of test 2*/
75472934872 /*argument 1 of test 3*/ 627364829374 /*argument 2 of test 3*/

После анализа каждого значения из каждого теста, Формула, которая должна быть рассчитана для получения результата, выглядит следующим образом:

result = argument1 * 8 * argument2

Позже в программе я должен связать результат с днем ​​недели. Например, если результат равен 2, днем ​​будет среда, а если результатом будет 8, днем ​​будет вторник. Чтобы справиться с этим, я выполняю следующий метод. (результат нужно разделить на 8)

String str = calculateDay(result/8);

Затем, чтобы узнать день недели, я создал следующий метод:

private String calculateDay (long n) {

        String days = new String[]{"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"};
        int d = 0;

        for (long i=1; i<=n; i++) {
            if (d==6) {
                d=0;
                continue;
            }

            d++;
        }

        return days[d];
    }

Проблема в том, что для текста файл с 100 различными тестами, это займет много времени, чтобы полностью выполнить, так как числа действительно большие, так что ... как я могу справиться с этим?

1 Ответ

2 голосов
/ 20 апреля 2020
  1. Большие числа: эти числа выглядят так, как будто они должны вполне удобно соответствовать значению long. Но если long недостаточно велик, вы можете использовать java.Math.BigInteger

  2. Расчет дня: для этого просто numDays% daysOfTheWeek. Если вам нужно использовать BigInteger, у него есть метод mod(...)

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