Как я могу делать операции с большими числами, которые не могут быть сохранены в одной переменной - PullRequest
3 голосов
/ 17 декабря 2010

В Java я хотел бы иметь возможность выполнять операции с действительно большими целыми числами (которые не могут быть сохранены в длинных), как я могу это сделать?

Как лучше всего поступатьс этим, с хорошими выступлениями?Должен ли я создать свой собственный тип данных, который содержит несколько длинных переменных?

Пример:

public class MyBigInteger{
    private long firstPart;
    private long secondPart;

   ...
}

public MyBigInteger add(long a, long b){
    MyBigInteger res;

    // WHAT CAN I DO HERE, I guess I could do something with the >> << operators, but I've never used them!

    return res;
}

Спасибо!

Ответы [ 5 ]

9 голосов
/ 17 декабря 2010

Вы должны проверить BigInteger класс Java.Он делает именно то, что вам нужно.

6 голосов
/ 17 декабря 2010
import java.math.BigInteger;

public class BigIntegerTest {

    public BigInteger add(long a, long b){
        BigInteger big1 = new BigInteger(Long.toString(a));
        BigInteger big2 = new BigInteger(Long.toString(b));

        return big1.add(big2);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(new BigIntegerTest().add(22342342424323423L, 234234234234234234L));
    }

}
4 голосов
/ 17 декабря 2010

Рассматривали ли вы стандартный библиотечный класс java.math.BigInteger , который поддерживает целые числа произвольной точности?

1 голос
/ 17 декабря 2010

Если вам действительно нужна высокая производительность, BigInteger / BigDecimal не собираются ее снижать.я использовал библиотеку apfloat , и она мне очень понравилась.

0 голосов
/ 17 декабря 2010

Если числа будут очень длинными, я бы предложил сохранить их в связанном списке (каждый узел - цифра) или в файле (в этом случае будут присутствовать задержки доступа к io), а затем добавить цифру к цифре, которую мы раньше делали вручную в нашем 2-м классе.

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