본문 바로가기
JAVA

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

by 열정적인 이찬형 2021. 12. 31.

상황

  • 입력 및 연산 결과 값이 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 + "\n");				//BigInteger 값 BufferedWriter에 저장
    	bw.flush();					//결과 출력
    	bw.close();
    	br.close();
    }
}
  • BigIntegerjava.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 + "\n");			//BigInteger 값
        bw.write("더하기 값 : " + num.add(temp) + "\n");			//더하기
        bw.write("빼기 값 : " + num.subtract(temp) + "\n");		//빼기
        bw.write("곱하기 값 : " + num.multiply(temp) + "\n");		//곱하기
        bw.write("나누기 값 : " + num.divide(temp) + "\n");		//나누기
        bw.write("나머지 값 : " + num.remainder(temp) + "\n");		//나머지
        bw.write("비교하기 : " + num.compareTo(temp) + "\n");		//비교
        float n = num.floatValue();					//형 변환
        bw.write("형변환 값(BigInteger->float) : " + n + "\n");
    	bw.flush();							//결과 출력
    	bw.close();
    	br.close();
    }
}

결과

댓글