망나니 AWOS의 일상
article thumbnail

 

문제는 쉬워 보일 수 있다.

 

하지만 입력에서 각 이진수의 길이는 80을 넘지 않는다.

즉, 79자리인 입력이 들어올 경우 웬만한 자료형들은 범위를 벗어나 NumberFormat과 같은 런타임 에러가 발생할 수 있다.

 

여기서 써야할 클래스는 BigInteger 클래스, int, long, String으로 해보았지만 되는 것은 없었고 결론은 BigInteger 클래스였다.

 

나의 풀이 방법은 이렇다.

무한한 수를 담을 수 있는 BigInteger 클래스로 값을 담아서 문자열로 바꿔 준 후

문자열(2진수)을 다시 10진수로 변환시키기 위해서 BigInteger 클래스에 담아준다.

그리고 BigInteger의 add 메소드를 통해 10진수로 변환한 a와 b의 가산을 해주고

toString() 메소드로 다시 2진수를 만들어서 문자열로 출력하도록 했다.

import java.math.BigInteger;
import java.util.Scanner;

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

        BigInteger b1 = sc.nextBigInteger();
        BigInteger b2 = sc.nextBigInteger();

        String s1 = b1.toString();
        String s2 = b2.toString();

        // 2진수를 10진수로 변환
        BigInteger a = new BigInteger(s1, 2);
        BigInteger b = new BigInteger(s2, 2);

        // 10진수로 변환한 두 수를 더하고
        BigInteger sum = a.add(b);

        // 두 수를 더한 sum의 값을 2진수로 다시 변환
        String result = sum.toString(2);
        System.out.println(result);
    }
}

 

 

String으로 입력받을 때는 범위가 벗어나서 numberformat 오류가 발생하는데 BigInteger 클래스로 입력을 받고 그것을 toString() 문자열로 바꿔주니 에러가 나지 않았다. String과 toString()의 차이가 있는 듯하다.

 

내가 생각했을 때 toString() 도 어찌 됐건 String에서 나온 것이라 범위가 같아서 에러 나지 않을까 했는데 정상 작동하는 거보고... 놀랐다.

 

혹시 아시는 분 있으시면 좀 알려주세요. ㅎㅎ

 

profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!