如何将运算符用于BigInteger

时间:2019-04-22 08:09:50

标签: java operators biginteger

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);
    }
}

我尝试寻找一些与此相关的答案,但无法解决。请有人能告诉我这是怎么回事。我将数据类型更改为整数,但是幂函数不起作用。

这是我得到的错误:

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 个答案:

答案 0 :(得分:4)

说明

您不能在BigInteger上使用运算符。它们不是像int这样的基元,而是类。 Java没有运算符重载。

看看class documentation并使用相应的方法:

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 Language Specification(JLS)中查找操作符的详细定义以及何时可以使用它们。

以下是相关部分的一些链接:

其中大多数使用数字类型 §4的概念,该概念由整数类型 FloatingPointType 组成:

  

整数类型为byteshortintlong,其值分别为8位,16位,32位和64位有符号的二进制补码整数和char,其值为表示UTF-16代码单元(§3.1)的16位无符号整数。

     

浮点类型为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);

如果可能的话,您应该选择从StringBigInteger,从BigIntegerString。由于BigInteger的用途是将其用于太大而无法用基元表示的数字:

// String -> BigInteger
String numberText = "10000000000000000000000000000000";
BigInteger number = new BigInteger(numberText);

// BigInteger -> String
BigInteger number = ...
String numberText = number.toString();

此外,请遵守Java命名约定。变量名称应为camelCase,因此c而不是C

此外,更喜欢使用有意义的变量名。像cd这样的名称不会帮助任何人理解该变量应该表示什么。

答案 1 :(得分:4)

算术运算不适用于Java中的对象。但是,BigInteger#add中已有BigInteger#divideBigInteger等方法。而不是

q=(x/n)

你会做

q = x.divide(n);

答案 2 :(得分:1)

您无法在Java对象中执行诸如“ *”,“ /”,“ +”之类的操作数,如果要执行这些操作,则需要像这样

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