ballqs 님의 블로그
[Java] int long BigInteger형 차이 본문
알고리즘 문제를 풀다가 높은 확률로 겪는 문제가 거의 이부분이였다.
수식에는 뭔가 틀린게 없는데 테스트케이스를 통과 못하는 경우!
계산된 수치가 Int가 감당할수 있는 크기를 벗어난 경우이다.
그래서 java에 다른 숫자 타입이 많지만 문제 풀면서 사용한 int long BigInteger에 대해서 작성해본다.
차이점
int | long | BigInteger | |
저장 공간 | 4 byte | 8 byte | Minimum 70 byte |
데이터 범위 | 약 -21억 ~ +21억 | 약 -900경 ~ +900경 | Infinity |
타입 | 기본타입 | 기본타입 | 참조타입 |
int
int는 산술 연산이 가능한 정수값을 저장하는 자료형이다.
기본 사용
// 아무런 선작업이 필요가 없다.
int num = 10;
int -> long
int i = 4;
long l = Long.valueOf(i); // int -> long
int -> BigInteger
int i = 100000;
BigInteger bi = BigInteger.valueOf(i); //int -> BigIntger
long
int와 마찬가지로 산술 가능한 자료형이다.
long 데이터 유형의 값 뒤에 L를 작성하여 long 값을 나타낸다.
기본 사용
long l = 1000000L;
long -> int
long l = 1000L;
int i = Long.valueOf(l).intValue(); // long -> int
long -> BigInteger
BigInteger bi = new BigInteger("123456789");
long l = bi.longValue(); // BigInteger -> long
BigInteger
선언 방법
import java.math.BigInteger;
사용 방법
BigInteger bi = new BigInteger("10000"); // "숫자"와 같이 사용!
BigInteger를 초기화하기 위해서는 문자열을 인자 값으로 할수 있다.
좀 더 자세한 내용은 공식 사이트를 보면 알 수 있다.
사칙연산
BigInteger bi1 = new BigInteger("1000");
BigInteger bi2 = new BigInteger("100");
System.out.println("덧셈(+) :" +bi1.add(bi2));
System.out.println("뺄셈(-) :" +bi1.subtract(bi2));
System.out.println("곱셈(*) :" +bi1.multiply(bi2));
System.out.println("나눗셈(/) :" +bi1.divide(bi2));
System.out.println("나머지(%) :" +bi1.remainder(bi2));
// 결과 출력
// 덧셈(+) : 1100
// 뺄셈(-) : 900
// 곱셈(*) : 100000
// 나눗셈(/) : 10
// 나머지(%) : 0
BigInteger -> int
BigInteger bi = new BigInteger("100000");
int i = bi.intValue(); //BigIntger -> int
BigInteger -> long
BigInteger bi = new BigInteger("100000");
long l = bi.longValue(); //BigIntger -> long
그 외의 형변환
다른 형변환은 왜 따로 정리하냐면 이 글의 목적은 int long BigInteger에 관해서 였기에 여기에다 작성하겠다.
BigInteger bi = new BigInteger("100000");
float f = bi.floatValue(); //BigIntger -> float
double d = bi.doubleValue(); //BigIntger -> double
String s = bi.toString(); //BigIntger -> String
2개의 수 비교
BigInteger bi1 = new BigInteger("100000");
BigInteger bi2 = new BigInteger("1000000");
int result = bi1.compareTo(bi2);
BigInteger에서 비교를 할때 사용하는 함수는 compareTo를 사용해 비교를 하고 나오는 결과값이 -1 , 0 , 1 가 나온다.
BigInteger bi1 = new BigInteger("50");
BigInteger bi2 = new BigInteger("1000");
BigInteger bi3 = new BigInteger("1000");
int result1 = bi1.compareTo(bi2);
System.out.println("bi1(50) < bi2(1000) : " + result1);
int result2 = bi2.compareTo(bi3);
System.out.println("bi2(1000) = bi3(1000) : " + result2);
int result3 = bi2.compareTo(bi1);
System.out.println("bi2(1000) > bi1(50) : " + result3);
// 출력 결과
// 작은 값을 큰 값이랑 비교시 : bi1(50) < bi2(1000) : -1
// 두 값이 같을 때 : bi2(1000) = bi3(1000) : 0
// 큰 값을 작은 값이랑 비교시 : bi2(1000) > bi1(50) : 1
'코딩 공부 > Java' 카테고리의 다른 글
[Java] 파일 생성 시 기본 구조 분석 (0) | 2024.07.23 |
---|---|
[Java] JVM이란? (0) | 2024.07.22 |
[Java] 최대 공약수(GCD) , 최소 공배수(LCM) 알고리즘 (0) | 2024.07.21 |
[Java] Set 사용법 (0) | 2024.07.18 |
Array.sort와 Collections.sort의 차이점 (0) | 2024.07.15 |