[JAVA] 큰 정수(숫자) 다루는 방법 BigInteger

[JAVA] 큰 정수(숫자) 다루는 방법 BigInteger

상황

입력 및 연산 결과 값이 int 범위보다 크면 long 타입을 사용하면 되지만 만약 long 범위를 벗어나게 된다면 NumFormatException(숫자 형식 오류) 이 발생할 수 있습니다.

범위보다 크면 타입을 사용하면 되지만 만약 범위를 벗어나게 된다면 간단하게 말해서 long 범위에 벗어나는 값을 사용하게 되면 오류가 발생하게 되는 것입니다.

C언어의 경우에는 unsigned 방식을 사용하여 해결이 가능하지만 JAVA 8 에서는 기본적으로 지원하지 않습니다.

JAVA 에서 따로 지원하는 방법이 있지만 BigInteger 를 사용하는 것이 편리하기 때문에 BigInteger 로 알려드리겠습니다.

타입(Type) 범위(Range) int -2147483648 ~ 2147483647 long -9223372036854775808 ~ 9223372036854775807

사용법

import java.io.*; import java.math.*; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader를 통해 입력 값 받기 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //BufferedWriter를 통해 결과 출력 BigInteger num = new BigInteger(br.readLine()); //BigInteger 선언 bw.write(num + "

"); //BigInteger 값 BufferedWriter에 저장 bw.flush(); //결과 출력 bw.close(); br.close(); } }

BigInteger 는 java.math 에 포함되어 있기 때문에 import java.math.* 를 선언해주어야 합니다.

는 에 포함되어 있기 때문에 를 선언해주어야 합니다. BigIntegr num = new BigInteger(String값 or Byte 값) 으로 초기화를 진행해주셔야 합니다.

으로 초기화를 진행해주셔야 합니다. 그 이후에 결과를 출력하거나 연산을 통해 코드에 맞게 사용하시면 됩니다.

연산은 아래에서 설명하도록 하겠습니다.

연산 및 형 변환

BigInteger num = new BigInteger("1000");BigInteger temp = new BigInteger("500");

연산 코드 더하기(num + temp) num.add(temp) 빼기(num-temp) num.subtract(temp) 곱하기(num * temp) num.multiply(temp) 나누기(num/temp) num.divide(temp) 나머지(num%temp) num.remainder(temp) 비교(num과 temp 크기 비교) num.compareTo(temp)

//num이 크면 1 같으면 0 작으면 -1 형변환 BigInteger->(int, long, float, double, String) num.intValue()

num.longValue()

num.floatValue()

num.doubleValue()

num.toString()

예제

코드

import java.io.*; import java.math.*; //BigInteger를 사용하기 위해 선언 public class Test{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader를 통해 입력 값 받기 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //BufferedWriter를 통해 결과 출력 BigInteger num = new BigInteger(br.readLine()); //BigInteger 초기화 BigInteger temp = new BigInteger(br.readLine()); bw.write("BigInteger 값 : " +num + "

"); //BigInteger 값 bw.write("더하기 값 : " + num.add(temp) + "

"); //더하기 bw.write("빼기 값 : " + num.subtract(temp) + "

"); //빼기 bw.write("곱하기 값 : " + num.multiply(temp) + "

"); //곱하기 bw.write("나누기 값 : " + num.divide(temp) + "

"); //나누기 bw.write("나머지 값 : " + num.remainder(temp) + "

"); //나머지 bw.write("비교하기 : " + num.compareTo(temp) + "

"); //비교 float n = num.floatValue(); //형 변환 bw.write("형변환 값(BigInteger->float) : " + n + "

"); bw.flush(); //결과 출력 bw.close(); br.close(); } }

결과

from http://tussle.tistory.com/140 by ccl(A) rewrite - 2021-12-31 20:28:15