[java] 정올 - 긴자리 진법변환

1 분 소요

업데이트:

문제

정올 - 긴자리 진법변환
A진법 수 N을 입력받아서 B진법 수로 출력하는 문제

  • 제한 사항
    입력받는 수 N : 1자리 이상 200자리 이하의 수
    진법 : 2 <= A, B <= 36

  • 예시
    입력 : 2 10110 10
    A : 2
    N : 10110
    B : 10
    2진법인 N을 10진법으로 바꾸는 것

풀이

BigInteger를 쓰면 아쥬아쥬 쉽게 풀 수 있는 문제

  • 자바에서 n진법을 10진법으로 바꾸는 건 간단하다
    Integer.parseInt("10110",2);
    

    이런식으로도 가능한데 입력받는 숫자의 길이가 200자리 이하까지 되기때문에 BigInteger를 사용한다
    JAVA API에서 BigInteger에 문제에서 썼던 부분을 정리하자면,

  • A진법으로 입력 받을 때

    Constructor (생성자)
    BigInteger(String val, int radix)
    Translates the String representation of a BigInteger in the specified radix into a BigInteger.

  • B진법으로 출력할 때

    Method (메서드)
    toString(int radix)
    Returns the String representation of this BigInteger in the given radix.

BigInteger는 add, subtarct, multiply, divide, mode, shiftLeft, shiftRight 등의 메소드를 지원한다

소스코드

import java.io.*;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class j3116_긴자리진법변환 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		while (true) {
			String input = br.readLine();
			if (input.equals("0")) // 입력 종료조건
				return;
			st = new StringTokenizer(input);
			int A = Integer.parseInt(st.nextToken());
			BigInteger bi = new BigInteger(st.nextToken(), A);
			int B = Integer.parseInt(st.nextToken());
			System.out.println(bi.toString(B).toUpperCase());
		}
	}

}

댓글남기기