Java compare integer and bigInteger

30,497

Solution 1

How do I compare an int with a BigInteger in Java? I specifically need the know if an int is less than a BigInteger.

Turn the int into a BigInteger before comparing:

if (BigInteger.valueOf(intValue).compareTo(bigIntegerValue) < 0) {
  // intValue is less than bigIntegerValue
}

Solution 2

Instead of

if (x == BigInteger.ZERO || x == BigInteger.ONE) {
    return x;

You should use :-

if (x.equals(BigInteger.ZERO) || x.equals(BigInteger.ONE)){
return x; 

Also, you should change the Integer first to BigInteger, and then compare, as mentioned by Joe in his answer:

 Integer a=3;
 if(BigInteger.valueOf(a).compareTo(BigInteger.TEN)<0){
    // your code...
 }
 else{
    // your rest code, and so on.
 } 

Solution 3

Just use BigInteger.compare:

int myInt = ...;
BigInteger myBigInt = ...;
BigInteger myIntAsABigInt = new BigInteger(String.valueOf(myInt));

if (myBigInt.compareTo(myIntAsABigInt) < 0) {
    System.out.println ("myInt is bigger than myBigInt");
} else if (myBigInt.compareTo(myIntAsABigInt) > 0) {
    System.out.println ("myBigInt is bigger than myInt");
} else {
    System.out.println ("myBigInt is equal to myInt");
}
Share:
30,497
Progo
Author by

Progo

Updated on July 09, 2022

Comments

  • Progo
    Progo almost 2 years

    How do I compare an int with a BigInteger in Java? I specifically need the know if an int is less than a BigInteger. Here is the code I am using:

    private static BigInteger two = new BigInteger("2");
    private static BigInteger three = new BigInteger("3");
    private static BigInteger zero = new BigInteger("0");    
    public static BigInteger bigIntSqRootCeil(BigInteger x) throws IllegalArgumentException {
        if (x.compareTo(BigInteger.ZERO) < 0) {
            throw new IllegalArgumentException("Negative argument.");
        }
        if (x == BigInteger.ZERO || x == BigInteger.ONE) {
            return x;
        }
        BigInteger two = BigInteger.valueOf(2L);
        BigInteger y;
        for (y = x.divide(two);
                y.compareTo(x.divide(y)) > 0;
                y = ((x.divide(y)).add(y)).divide(two));
        if (x.compareTo(y.multiply(y)) == 0) {
            return y;
        } else {
            return y.add(BigInteger.ONE);
        }
    }
    private static boolean isPrimeBig(BigInteger n){
        if (n.mod(two) == zero)
            return (n.equals(two));
        if (n.mod(three) == zero)
            return (n.equals(three));
        BigInteger m = bigIntSqRootCeil(n);
        for (int i = 5; i <= m; i += 6) {
            if (n.mod(BigInteger.valueOf(i)) == zero)
                return false;
            if(n.mod(BigInteger.valueOf(i + 2)) == zero)
                return false;
        };
        return true;
    };
    

    Thanks.

    • E_net4 the comment flagger
      E_net4 the comment flagger almost 10 years
      Well, why do you think that isn't working?
    • Progo
      Progo almost 10 years
      @E_net4 Um... I know why it isn't working. I am looking for a solution.
    • Gus
      Gus almost 10 years
      That is a LOT of code if what you're asking for is "compare BigInt with an int". Is there another question hidden in there? Otherwise: docs.oracle.com/javase/6/docs/api/java/math/… compareTo returns -1 (less than), 0 (equal), or 1 (greater than)
  • E_net4 the comment flagger
    E_net4 the comment flagger almost 10 years
    Although it is an issue in the question's code snippet, that doesn't really answer the main question.
  • Gus
    Gus almost 10 years
    +1 for casting the int into a BigInt, vs the other way around. Might want to mention why