Объяснение
Вы не можете использовать операторы на BigInteger
. Они не такие примитивы, как int
, это классы. В Java нет перегрузки операторов.
Взгляните на документацию класса и используйте соответствующие методы:
BigInteger first = BigInteger.ONE;
BigInteger second = BigInteger.TEN;
BigInteger addResult = first.add(second);
BigInteger subResult = first.subtract(second);
BigInteger multResult = first.multiply(second);
BigInteger divResult = first.divide(second);
Подробности оператора
Подробные определения операторов и их использование можно найти в Спецификации языка Java (JLS).
Вот несколько ссылок на соответствующие разделы:
Большинство из них работают с понятием Числовой тип §4 , который состоит из Интегральный тип и FloatingPointType :
Целочисленными типами являются byte
, short
, int
и long
, значениями которых являются 8-разрядные, 16-разрядные, 32-разрядные и 64-разрядные целые числа с двумя дополнениями со знаком соответственно, и char
, значениями которых являются 16-разрядные целые числа без знака, представляющие кодовые единицы UTF-16 ( §3.1 ).
Типы с плавающей точкой: float
, значения которых включают 32-битные числа с плавающей точкой IEEE 754, и double
, значения которых включают 64-битные числа с плавающей точкой IEEE 754.
Кроме того, Java может распаковывать классы-оболочки, такие как Integer
, в int
и наоборот, если это необходимо. Это добавляет распаковывающие преобразования §5.1.8 к набору поддерживаемых операндов.
Примечания
Ваше создание BigInteger
излишне длинное и сложное:
// Yours
BigInteger C = BigDecimal.valueOf(e1).toBigInteger();
// Prefer this instead
BigInteger c = BigInteger.valueOf(e1);
И, если возможно, предпочтительнее перейти от String
до BigInteger
и от BigInteger
до String
. Поскольку цель BigInteger
состоит в том, чтобы использовать его для чисел, которые слишком велики для представления примитивами:
// String -> BigInteger
String numberText = "10000000000000000000000000000000";
BigInteger number = new BigInteger(numberText);
// BigInteger -> String
BigInteger number = ...
String numberText = number.toString();
Также, пожалуйста, придерживайтесь соглашений об именах Java. Имена переменных должны быть camelCase, поэтому c
, а не C
.
Кроме того, предпочитайте иметь значимые имена переменных. Такие имена, как c
или d
, никому не помогают понять, что переменная должна представлять.