Как использовать операторы для BigInteger - PullRequest
0 голосов
/ 22 апреля 2019
import java.lang.Math;
import java.math.BigInteger;
import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        int e1 = 20, d = 13;
        BigInteger C = BigDecimal.valueOf(e1).toBigInteger();

        BigInteger po = C.pow(d);
        System.out.println("pow is:" + po);

        int num = 11;
        BigInteger x = po;
        BigInteger n = BigDecimal.valueOf(num).toBigInteger();
        BigInteger p, q, m;

        System.out.println("x: " + x);

        q=(x / n);
        p=(q * n);
        m=(x - p);
        System.out.println("mod is:" + m);
    }
}

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

Это ошибка, которую я получаю:

error: bad operand types for binary operator '/'
    q=(x/n);
        ^
  first type:  BigInteger
  second type: BigInteger
Main.java:33: error: bad operand types for binary operator '*'
    p=(q*n);
        ^
  first type:  BigInteger
  second type: BigInteger
Main.java:34: error: bad operand types for binary operator '-'
    m=(x-p);
        ^
  first type:  BigInteger
  second type: BigInteger
3 errors

    .

Ответы [ 3 ]

4 голосов
/ 22 апреля 2019

Арифметические операции не работают с объектами в Java.Однако уже есть методы, такие как BigInteger#add, BigInteger#divide и т. Д. В BigInteger.Вместо того, чтобы делать

q=(x/n)

, вы бы сделали

q = x.divide(n);
4 голосов
/ 22 апреля 2019

Объяснение

Вы не можете использовать операторы на 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, никому не помогают понять, что переменная должна представлять.

1 голос
/ 22 апреля 2019

Вы не можете использовать такие операнды, как "*", "/", "+" для объектов в Java, если вам нужны эти операции, вам нужно сделать это следующим образом

q = x.divide(n);
p=q.multiply(n);
m=x.subtract(p);
...