[java] 정올 - 긴자리 진법변환
업데이트:
문제
정올 - 긴자리 진법변환
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());
}
}
}
댓글남기기