본문 바로가기
발전/JAVA

[java] BigInteger (java.math) - 백준 1271번, 2338번

by babepro 2021. 9. 11.

백준 1271번 정답

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.math.BigInteger;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner  = new Scanner(System.in);
        
 
        BigInteger n = scanner.nextBigInteger();
        BigInteger m = scanner.nextBigInteger();
        scanner.close();
        
        System.out.println(n.divide(m));
        System.out.println(n.remainder(m));
    }
}
 
cs

 

백준 2338번 정답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.math.BigInteger;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        BigInteger bigA, bigB;
        bigA  = scanner.nextBigInteger();
        bigB = scanner.nextBigInteger();
        
        System.out.println(bigA.add(bigB));
        System.out.println(bigA.subtract(bigB));
        System.out.println(bigA.multiply(bigB));
        
        scanner.close();
    }
}
 
cs

 

1271번 후기

 

브론즈 5 문제인데 정답률이 30 % 를 조금 웃돈다. 

난 맞을줄 알고 호기롭게 도전했지만 런타임에러...

오타인줄 알고 꼼꼼히 읽고 다시 도전했는데 또 런타임 에러..

 

문제를 다시 읽어보니까

이런 주옥같은 범위가 눈에 띄었다. 

 

자바 기본 자료형의 범위

자바 기본자료형 범위

double이 10의 308승,, 10의 1000승은 택도 없다. 

 

그래서 찾아낸 녀석이 java.math.BigInteger

 

BigInteger big = new BigInteger(7687687562398475987349);

이런식으로 써도 되고

 

BigInteger n = scanner.nextBigInteger();

이렇게 입력받아서 써도 된다. 

 

사칙연산이 일반 연산자로는 안되고 메소드를 이용해야 한다. (비교 할 때도 == 사용 불가, .equals 사용해야한다. )

(사칙연산 말고도 절댓값, 루트 등 많은 기능 제공한다. )

a + b : a.add(b);

a - b : a.subtract(b);
a * b : a.multiply(b);
a / b : a.divide(b);
a % b : a.remainder(b);

 

쓸 일이 있을진 모르겠지만 새로운걸 알았다.  ㅎㅎ

필요하니까 만들었겠지

 

2338번도 똑같은 맥락이라 추가함