| 자료형 | 범위 (십진수) | 최대 값 크기 (10ⁿ 기준) |
|---|---|---|
int | -2^31 ~ 2^31-1 (약 ±21억) | n ≤ 9 (10억 이하) |
long | -2^63 ~ 2^63-1 (약 ±9경) | n ≤ 18 |
BigInteger | 제한 없음 (메모리가 허용하는 한 무한대) | n > 18 |
BigInteger 객체가 생성된다double과 달리 정확한 정수 연산이 가능해 부동소수점 오차 가 없다+, -, *, / 같은 기본 연산자 대신 메서드로 연산 해야 한다import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger x = new BigInteger("123456789012345678901234567890");
System.out.println(x); // 123456789012345678901234567890
}
}
| 연산 | 메서드 |
|---|---|
| 덧셈 | add(BigInteger val) |
| 뺄셈 | subtract(BigInteger val) |
| 곱셈 | multiply(BigInteger val) |
| 나눗셈 | divide(BigInteger val) |
| 나머지 | mod(BigInteger val) |
| 제곱 | pow(int n) |
| 최대공약수(GCD) | gcd(BigInteger val) |
| 비교 | compareTo(BigInteger val) |
| 절댓값 | abs() |
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger num1 = new BigInteger("987654321987654321987654321");
BigInteger num2 = new BigInteger("123456789123456789123456789");
BigInteger sum = num1.add(num2); // 덧셈
BigInteger subtract = num1.subtract(num2); // 뺄셈
BigInteger multiply = num1.multiply(num2); // 곱셈
BigInteger divide = num1.divide(num2); // 나눗셈
BigInteger mod = num1.mod(num2); // 나머지
System.out.println("덧셈: " + sum);
System.out.println("뺄셈: " + subtract);
System.out.println("곱셈: " + multiply);
System.out.println("나눗셈: " + divide);
System.out.println("나머지: " + mod);
}
}
| 주요 메소드 | 설명 |
|---|---|
compareTo(BigInteger) | 두 수 크기 비교 |
gcd(BigInteger) | 최대공약수(GCD) 계산 |
mod(BigInteger) | 나머지 연산 |
pow(int exponent) | 거듭제곱 연산 |
isProbablePrime(int) | 소수 판별 |
toString(int radix) | 특정 진법 문자열 변환 |
abs() | 절댓값 반환 |
negate() | 부호 반전 |
bitCount() | 이진수의 1 개수 반환 |
BigInteger a = new BigInteger("100");
BigInteger b = new BigInteger("200");
int result = a.compareTo(b); // 결과: -1 (a < b)
설명 : a와 b를 비교하여 결과를 반환
시그니처 : public int compareTo(BigInteger val)
매개변수 : val - 비교할 BigInteger 값
사용 상황 : 두 수의 대소 비교가 필요할 때 (a < b, a > b, a == b 판단 가능)
BigInteger a = new BigInteger("48");
BigInteger b = new BigInteger("18");
BigInteger result = a.gcd(b); // 결과: 6
설명 : 두 수의 최대공약수(GCD, Greatest Common Divisor) 계산
시그니처 : public BigInteger gcd(BigInteger val)
매개변수 : val - 최대공약수를 구할 BigInteger 값
사용 상황 : 유클리드 호제법을 사용하여 최대공약수를 구할 때
BigInteger a = new BigInteger("10");
BigInteger b = new BigInteger("3");
BigInteger result = a.mod(b); // 결과: 1
설명 : a를 b로 나눈 나머지를 반환
시그니처 : public BigInteger mod(BigInteger m)
매개변수 : m - 나눌 값
사용 상황 : 나머지 연산이 필요할 때 (예: 모듈러 연산, 암호학 등)
BigInteger a = new BigInteger("2");
BigInteger result = a.pow(10); // 결과: 1024
설명 : a의 exponent 거듭제곱 계산
시그니처 : public BigInteger pow(int exponent)
매개변수 : exponent - 거듭제곱 할 지수
사용 상황 : 큰 수의 거듭제곱 연산이 필요할 때
BigInteger a = new BigInteger("17");
boolean isPrime = a.isProbablePrime(10); // 결과: true
설명 : 주어진 숫자가 소수인지 확률적으로 판별
시그니처 : public boolean isProbablePrime(int certainty)
매개변수 : certainty - 소수 판별 신뢰도 (값이 클수록 정확함)
사용 상황 : 암호학, 소수 판별 문제 등
BigInteger a = new BigInteger("255");
String binaryStr = a.toString(2); // 결과: "11111111"
String hexStr = a.toString(16); // 결과: "ff"
설명 : BigInteger를 특정 진법(2진수, 16진수 등) 문자열로 변환
시그니처 : public String toString(int radix)
매개변수 : radix - 변환할 진법 (예: 2, 8, 16 등)
사용 상황 : 숫자를 이진수, 16진수 등으로 변환할 때
BigInteger a = new BigInteger("-100");
BigInteger absNum = a.abs(); // 결과: 100
설명 : BigInteger의 절댓값을 반환
시그니처 : public BigInteger abs()
매개변수 : 없음
사용 상황 : 음수를 양수로 변환할 때
BigInteger a = new BigInteger("100");
BigInteger negNum = a.negate(); // 결과: -100
설명 : BigInteger의 부호를 반전 (양수 → 음수, 음수 → 양수)
시그니처 : public BigInteger negate()
매개변수 : 없음
사용 상황 : 부호를 바꿔야 할 때
BigInteger a = new BigInteger("15"); // 1111 (2진수)
int count = a.bitCount(); // 결과: 4
설명 : BigInteger의 이진수 표현에서 1의 개수 반환
시그니처 : public int bitCount()
매개변수 : 없음
사용 상황 : 이진수 내 1의 개수를 셀 때 (비트마스킹 활용 가능)
‼️ 주의할 점
- 연산할 때마다 새로운 객체가 생성 됨 → 연산이 많으면 성능이 저하 될 수 있다
- 소수점 이 필요하면
BigDecimal을 사용해야 한다toString()을 사용하여 출력해야 제대로 된 값을 확인할 수 있다