안녕하세요, 여행벌입니다.
오늘은 자바 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 클래스와 다양한 메소드를 지원해줍니다.
이외에도 더 많은 메소드가 있지만, 오늘은 가장 유용하게 사용되는 메소드 위주로 정리를 해봤습니다.
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] #30 자바 컬렉션프레임워크(Collection Framework) (0) | 2020.07.03 |
---|---|
[JAVA] #29 자바 제네릭, 제네릭클래스, 제네릭메소드 (0) | 2020.06.26 |
[JAVA] #27 Integer 클래스 메소드 정리 (0) | 2020.06.25 |
[JAVA] #26 자바 Number 클래스 메소드 정리 (0) | 2020.06.23 |
[JAVA] #25 자바 Wrapper 클래스 (0) | 2020.06.23 |