코딩테스트 문제를 풀다가 히든케이스를 통과하지 못했는데,
Math.pow()를 이용한 거듭제곱 계산에서 int, long의 정수 범위를 초과한 것으로 예상된다.
이를 위해 long 범위를 초과하는 수를 표현할 수 있는 방법을 찾아보았다.
종류 | 값의 범위 |
---|---|
int | -2147483648 ~ 2147483647 |
long | -9223372036854775808 ~ 9223372036854775807 |
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);
int
와 long
의 경우 처리할 수 있는 값의 범위를 초과하여 가질 수 있는 최대 값으로 계산되어있다.
``
문자열 형태로 이루어져 있고, 숫자의 범위가 무한대이다.
/* 예제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
미리 알았으면 좋았을텐데 아쉽다 😂