백준 런타임에러-1271번 - 엄청난 부자2 매우 큰 정수 BigInteger

byeol·2022년 12월 28일
0
 import java.util.*;

 class Main{
 public static void main(String[] args){
    Scanner kb = new Scanner(System.in); 
    int m = kb.nextInt(); 
    int n = kb.nextInt();
    System.out.println(m/n); 
    System.out.println(m%n);
   }
 }

첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 10^1000, m과 n은 10진수 정수)

  • int (4byte=32bit): -2^31 ~ 2^31
    대략 10자리의 수 (-2,147,483,648~2,147,483,648)

  • long (8byte=64bit): -2^63 ~ 2^63-1
    대략 20자리수의 수(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)

    따라서 java의 기본형으로 표현될 수 없었던 것

    그래서 BigInteger를 사용해야 한다.

    BigInteger bigNumber = new BigInteger("2000");

    BigInteger은 java.math안에 있으며 위와 같이 선언하며
    문자열을 인자 값으로 넘겨준다.

    또한 문자열이기 때문에 사칙연산이 불가능하여 내부에 있는 메서드를 이용해서 연산한다.

     System.out.println("덧셈(+) :" +bigNumber1.add(bigNumber2));
     System.out.println("뺄셈(-) :" +bigNumber1.subtract(bigNumber2));
     System.out.println("곱셈(*) :" +bigNumber1.multiply(bigNumber2));
     System.out.println("나눗셈(/) :" +bigNumber1.divide(bigNumber2));
     System.out.println("나머지(%) :" +bigNumber1.remainder(bigNumber2));

    단, 제곱근의 경우 좀 다르다.

         String a = kb.next();
         int b = kb.nextInt();
    
         BigInteger aa = new BigInteger(a);
    
         arr[i] = aa.pow(b);
    BigInteger.pow(int)가 온다.

    그러나 형변환이 가능하기 때문에
    형변환하여 연산할 수 있다.

     int int_bigNum = bigNumber.intValue(); //BigIntger -> int
     long long_bigNum = bigNumber.longValue(); //BigIntger -> long
     float float_bigNum = bigNumber.floatValue(); //BigIntger -> float
     double double_bigNum = bigNumber.doubleValue(); //BigIntger -> double
     String String_bigNum = bigNumber.toString(); //BigIntger -> String

매우매우 쉬운 문제인데 왜 계속 런타임 에러가 뜨는지... 바보인가 의심했지만

import java.util.*;
import java.math.*;

class Main{
  public static void main(String[] args){
     Scanner kb = new Scanner(System.in); 

     String m = kb.next(); 
     String n = kb.next();

     BigInteger mm = new BigInteger(m);
     BigInteger nn = new BigInteger(n);

     System.out.println(mm.divide(nn)); 
     System.out.println(mm.remainder(nn));
   }
}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글