BigInteger (java.math.BigInteger)

  • 매우 큰 숫자를 의미하는 것

  • int의 표현 범위

    • -2^31 ~ 2^31 -1
  • long의 표현 범위

    • -2^63 ~ 2^63 -1
  • int와 long의 범위를 넘어가는 경우?

    • BigInteger를 직접 구현하는 방법
    • Java를 사용하지 않는 방법
      • Python은 정수에 대한 길이의 제한이 없음
  • BigInteger 사용 방법

    • 공식 문서 : https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html

    • 기본적인 사용 방법

      import java.math.*;
      
      public class Main {
        public static void main() {
          BigInteger a = new BigInteger("10000");
          BigInteger b = new BigInteger("1000");
          // 사칙연산 기호가 먹히지 않으므로, 메소드를 이용해야 함
          BigInteger c = a.add(b);
      
          System.out.println("a = " + a);
          System.out.println("b = " + b);
          System.out.println("c = " + c);
        }
      }
    • BigInteger의 메소드들

      System.out.println("a+b = " + a.add(b));
      System.out.println("a-b = " + a.substract(b));
      System.out.println("a*b = " + a.multiply(b));
      System.out.println("a/b = " + a.divide(b));
      System.out.println("a%b = " + a.remainder(b));
      // 최대공약수를 구하는 함수가 이미 작성되어 있음
      System.out.println("gcd(a,b) = " + a.gcd(b));
      System.out.println("-a = " + a.negate());
      
      System.out.println("ZERO = " + BigInteger.ZERO);
      System.out.println("ONE = " + BigInteger.ONE);
      System.out.println("TEN = " + BigInteger.TEN);
      
      System.out.println("a^10 = " + a.pow(10));
    • BigInteger의 입력과 compareTo메소드

      BigInteger a = sc.nextBigInteger();
      BigInteger b = sc.nextBigInteger();
      int c = a.compareTo(b);
      if (c < 0) {
      System.out.println("<");
      } else if (c == 0) {
      System.out.println("==");
      } else {
      System.out.println(">");
      }
      System.out.println("compareTo = " + c);
    • BigInteger가 같은지 비교

      boolean e = a.equals(b);
      if (e) {
      System.out.println("==");
      } else {
      System.out.println("!="); 
      }
      System.out.println("equals = " + e);
  • BigInteger의 사용 예제 1

    • boj.kr/10826 문제
      BigInteger[] d = new BigInteger[Math.max, n+1, 2];
                                      // Math.max를 사용한 이유는, 최소 2개가 필요하기 때문
                                      // 초기값 0, 1을 넣어주려면 n이 몇이든 2개의 BigInteger 배열이 필요하다.
      d[0] = BigInteger.ZERO;
      d[1] = BigInteger.ONE;
      for(int i=2; i<=n; i++) {
        d[i] = d[i-1].add(d[i-2]); 
      }
      System.out.println(d[n]);
  • BigInteger의 사용 예제 2

    • boj.kr/10757 문제

        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));
                StringTokenizer st = new StringTokenizer(br.readLine(), " ");
      
                BigInteger a = new BigInteger(st.nextToken());
                BigInteger b = new BigInteger(st.nextToken());
      
                System.out.println(a.add(b));
            }
        }

BigDecimal (java.math.BigDecimal)

  • 어떠한 수를 정확히 계산할 때 사용함

  • BigInteger의 사용 예제 3

    • boj.kr/10827

        import java.math.*;
        import java.util.*;
        public class Main{
          public static void main(String args[]) {
            Scanner sc = new Scanner(System.in);
            BigDecimal a = sc.nextBigDecimal();
            int b = sc.nextInt();
      
            BigDecimal c = a.pow(b);
            System.out.println(c.toPlainString());
            // 정확한 값을 출력하기 위한 toPlainString
          }
        }