큰 정수 다루기 BigInteger

Yuri JI·2022년 12월 22일
0

TIL

목록 보기
2/10

코딩테스트 문제를 풀다가 히든케이스를 통과하지 못했는데,
Math.pow()를 이용한 거듭제곱 계산에서 int, long의 정수 범위를 초과한 것으로 예상된다.
이를 위해 long 범위를 초과하는 수를 표현할 수 있는 방법을 찾아보았다.

정수 범위

종류값의 범위
int-2147483648 ~ 2147483647
long-9223372036854775808 ~ 9223372036854775807

long 범위를 초과하는 계산 -> BigInteger를 사용

  • Math.pow()로 2의 10만승을 계산해보자

  • 예제 코드

int intNumber = (int) Math.pow(2, 100000);
long longNumber = (long) Math.pow(2, 100000);
BigInteger bigInteger = new BigInteger("2").pow(10000);
  • 실행 결과

intlong의 경우 처리할 수 있는 값의 범위를 초과하여 가질 수 있는 최대 값으로 계산되어있다.
``

BigInteger 클래스

문자열 형태로 이루어져 있고, 숫자의 범위가 무한대이다.

/* 예제1 - 선언 */
// BigInteger는 문자열이다. 초기화를 위해 문자열을 인자로 넘겨준다.
BigInteger bigInteger = new BigInteger("1000000");
/* 예제2 - 형변환 */
BigInteger bigNumber = BigInteger.valueOf(100000); //int -> BigIntger

int int_bigNum = bigNumber.intValue(); //BigIntger -> int
long long_bigNum = bigNumber.longValue(); //BigIntger -> long
float float_bigNum = bigNumber.floatValue(); //BigIntger -> float
double double_bigNum = bigNumber.doubleValue(); //BigIntger -> double
String String_bigNum = bigNumber.toString(); //BigIntger -> String

참고한 블로그

https://coding-factory.tistory.com/604

미리 알았으면 좋았을텐데 아쉽다 😂

profile
안녕하세요 😄

0개의 댓글