안녕하세요, 여행벌입니다.

오늘은 자바 BigInteger 클래스에 대해 알아보고, 메소드를 정리해보겠습니다.


BigInteger 클래스

 BigInteger 클래스는 클래스 이름 그대로, 큰! 정수를 다루기 위해 등장한 클래스입니다. 우리는 정수를 int, long 기본 자료형으로 표현할 수 있습니다. 하지만, int, long 은 모두 표현할 수 있는 값의 크기가 한계가 있습니다. 그러면, long 형 범위보다도 큰 값을 JAVA 에서는 표현할 수 없을까요?

 이를 해결하기 위해 자바에서는 BigInteger 클래스를 지원해줍니다.

 Wrapper 클래스들과 마찬가지로, Number 클래스를 상속하고 있습니다.

1
import java.math.BigInteger;
cs

 내장클래스가 아니므로 사용하기 위해서는BigInteger 클래스를 import 해와야 합니다.

BigInteger(String val)

 가장 자주 쓰이는 BigInteger 생성자 입니다. long 형을 벗어나는 범위의 값을 표현해야 하기 때문에 입력을 int, long 이 아닌 String 으로 받고 있습니다.

1
2
3
4
5
6
7
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        new BigInteger("10000000000000000000000000");
    }
}
cs

 long 형으로도 표현할 수 없는 숫자 10000000000000000000000000 를 담고 있는 BigInteger 인스턴스를 만들었습니다.

BigInteger(String val, int radix)

 자주 쓰이는 생성자로 몇 진법으로 표현한 숫자인지 입력하는 생성자가 있습니다.  

1
2
3
4
5
6
7
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        System.out.println(new BigInteger("55555555555555555555555555555",8));
    }
}
cs

 8진법으로 표현한 55555555555555555555555555555 로 출력해보면 10진법 110530360650480381687421805와 같다는 것을 알 수 있습니다.

public BigInteger add(BigInteger val)

 thir + val 를 BigInteger 로 return해줍니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println(num1.add(num2));
    }
}
cs

public BigInteger subtract(BigInteger val)

 this - val 를 BigInteger로 return 해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
package Hello;
 
 
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println(num1.subtract(num2));
    }
}
cs
1
2
[Output]
뺄셈 결과 : 1823989474918455473622288929145
cs

public BigInteger multiply(BigInteger val)

 this * val 를 BigInteger로 return 해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
package Hello;
 
 
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println("곱셈 결과 : " + num1.multiply(num2));
    }
}
cs

public BigInteger divide(BigInteger val)

 this / val 를 BigInteger 로 return 해줍니다. 이때, val 가 0이라면 ArithmeticException 에러가 발생합니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println("나눗셈 결과 : " + num1.divide(num2));
    }
}
cs

public BigInteger remainder(BigInteger val)

 this % val 를 BigInteger 로 return 해줍니다. 이때, val 가 0이라면 ArithmeticException 에러가 발생합니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println("나머지 결과  : " + num1.remainder(num2));
    }
}
cs

public BigInteger pow(int exponent)

 this^exponent 값을 BigInteger로 return 해줍니다.

 지수값은 int 로 받아도 충분하므로 매개변수를 int 형 입니다.

1
2
3
4
5
6
7
8
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        System.out.println("제곱 결과  : " + num1.pow(2));
    }
}
cs

public BigInteger gcd(BigInteger val)

 this 와 value 의 절댓값을 나누는 가장 큰 공약수를 BigInteger로 return 해줍니다. 만약에 this, val 가 모두 0이라면 gcd 값은 0이 됩니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println("최대공약수  : " + num1.gcd(num2));
    }
}
cs

public BigInteger abs()

 this 의 절댓값을 BigInteger로 return 해줍니다.

1
2
3
4
5
6
7
8
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("-1823989474918578930411412385934");
        System.out.println("절댓값  : " + num1.abs());
    }
}
cs

public BigInteger and(BigInteger val)

 this 와 val 값을 & (and) 연산해서 BigInteger 값으로 return 해줍니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println("num1 & num2  : " + num1.and(num2));
    }
}
cs

public BigInteger or(BigInteger val)

 this 와 val 값을 | (or) 연산해서 BigInteger 값으로 return 해줍니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println("num1 | num2  : " + num1.or(num2));
    }
}
cs

public BigInteger xor(BigInteger val)

 this 와 val 값을 ^ (xor) 연산해서 BigInteger 값으로 return 해줍니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("123456789123456789");
        System.out.println("num1 ^ num2  : " + num1.xor(num2));
    }
}
cs

public BigInteger not(BigInteger val)

 val 값을 ~ (not) 연산해서 BigInteger 값으로 return 해줍니다.

1
2
3
4
5
6
7
8
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        System.out.println("~num1  : " + num1.not());
    }
}
cs

public BigInteger min(BigInteger val)

 this 와 val 값 중 더 작은 값을 BigInteger 값으로 return 해줍니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("19847981358913892021");
        System.out.println("더 작은 값  : " + num1.min(num2));
    }
}
cs

public BigInteger max(BigInteger val)

 this 와 val 값 중 더 큰 값을 BigInteger 값으로 return 해줍니다.

1
2
3
4
5
6
7
8
9
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        BigInteger num2 = new BigInteger("19847981358913892021");
        System.out.println("더 큰 값  : " + num1.max(num2));
    }
}
cs

public String toString()

 BigInteger로 표현된 this 값을 String 으로 return 해줍니다.

1
2
3
4
5
6
7
8
import java.math.BigInteger;
 
public class test{
    public static void main(String args[]) {
        BigInteger num1 = new BigInteger("1823989474918578930411412385934");
        System.out.println("String으로 변환  : " + num1.toString());
    }
}
cs

자바는 long 형을 벗어나는 정수를 다룰 수 있는 BigInteger 클래스와 다양한 메소드를 지원해줍니다.

이외에도 더 많은 메소드가 있지만, 오늘은 가장 유용하게 사용되는 메소드 위주로 정리를 해봤습니다.

 

+ Recent posts