Algorithm Study With Java #4 (JAVA BigInteger)

Jake Seo·2019년 2월 12일
0

java algorithm study

목록 보기
4/18

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

    • 기본적인 사용 방법

      		```java

      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 문제

    ```java
    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
         }
       }
    	```
profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글