본문 바로가기
Language/Java

[Java] BigInteger 다루기 (백준 1247번 - 부호)

by 애기 개발자 2023. 4. 12.
반응형

우선 수를 다루는 Data Type을 알아보면

 

Data Type Size Description
byte 1 byte Stores whole numbers from -128 to 127
short 2 bytes Stores whole numbers from -32,768 to 32,767
int 4 bytes Stores whole numbers from -2,147,483,648 to 2,147,483,647
long 8 bytes Stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float 4 bytes Stores fractional numbers. Sufficient for storing 6 to 7 decimal digits
double 8 bytes Stores fractional numbers. Sufficient for storing 15 decimal digits
boolean 1 bit Stores true or false values
char 2 bytes Stores a single character/letter or ASCII values

가장 큰 long 타입도 9,223,372,036,854,775,807 까지의 숫자만 저장이 가능하다.

 

이보다 더 큰 숫자를 저장하는 방법이 BingInteger 이다.

 

초기화

BigInteger bigInt1 = new BigInteger("0");

java스럽게 평범하게 선언하여 사용하면 된다.

 

여기서 중요한 점은 BigInteger는 String 타입의 변수이다.

 

숫자라고 생각하여 정수형 타입으로 넣으면 안 된다.

 

계산

숫자는 당연히 계산이 되어야 한다.

 

BigInteger bigInt1 = new BigInteger("5");
BigInteger bigInt2 = new BigInteger("2");

System.out.println("덧셈(+) :" +bigInt1.add(bigInt2));
System.out.println("뺄셈(-) :" +bigInt1.subtract(bigInt2));
System.out.println("곱셈(*) :" +bigInt1.multiply(bigInt2));
System.out.println("나눗셈(/) :" +bigInt1.divide(bigInt2));
System.out.println("나머지(%) :" +bigInt1.remainder(bigInt2));
덧셈(+) :7
뺄셈(-) :3
곱셈(*) :10
나눗셈(/) :2
나머지(%) :1

 

 

형 변환

BigInteger bigInt1 = BigInteger.valueOf(5); //int -> BigIntger

int int_bigInt1 = bigInt1.intValue(); //BigIntger -> int
long long_bigInt1 = bigInt1.longValue(); //BigIntger -> long
float float_bigInt1 = bigInt1.floatValue(); //BigIntger -> float
double double_bigInt1 = bigInt1.doubleValue(); //BigIntger -> double
String String_bigInt1 = bigInt1.toString(); //BigIntger -> String

 

BigInteger의 양수, 음수, 0 확인

 

bigInt1.signum()

signum() 을 사용하면 해당 변수가 양수인지, 음수인지, 0인지 확인 후 리턴하여 준다.

 

https://www.acmicpc.net/problem/1247

 

1247번: 부호

총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 N(1 ≤ N ≤ 100,000)이 주어지고, 둘째 줄부터 N개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거

www.acmicpc.net

 

위 문제의 정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for(int i=0; i<3; i++) {
			BigInteger sum = new BigInteger("0");
			int n = Integer.parseInt(br.readLine());
			for(int j=0; j<n; j++) {
				BigInteger param = new BigInteger(br.readLine());
				sum = sum.add(param);
			}
			if(sum.signum() == 1) {
				System.out.println("+");
			} else if(sum.signum() == -1) {
				System.out.println("-");
			} else {
				System.out.println("0");
			}
		}
	}
}
반응형

댓글