상황
- 입력 및 연산 결과 값이 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();
}
}
- 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 + "\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();
}
}
결과
'JAVA' 카테고리의 다른 글
[JAVA] 숫자 큰값/작은값 비교하기 Math.max/Math.min (0) | 2022.01.04 |
---|---|
[JAVA] 숫자 제곱근(루트) 구하는 방법 Math.sqrt() (0) | 2022.01.02 |
프로그래머스 코딩테스트 연습 (Hash) 위장 (0) | 2021.11.16 |
프로그래머스 코딩테스트 연습 (Hash) 전화번호 목록도움말 (0) | 2021.11.16 |
프로그래머스 코딩테스트 연습 (Hash) 완주하지 못한 선수 (0) | 2021.11.15 |
댓글