11005번 문제
문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
🗝️포인트
- 진법 변환 간단한 개념에 대해 이해하자.
- x진법 → 10진법
: x의 제곱근 값을 더해서 구한다.
- 10진법 → x진법
: 10진법 값을 x로 나누어 몫이 0이 나올때까지 나눠진 몫을 또 나눠준 다음 나머지 값들을 역순으로 나열하면 된다.
- 'A' ~ 'Z' 문자가 아스키 코드표에서 65~90까지의 값을 의미하는 것을 알고 있어야 한다.
🆕새롭게 알게된 내용
- StringBuilder에 reverse() 메서드... 역순으로 정렬해주는 함수.
제출 답안
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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()," ");
int N = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
while(N > 0){
if(N%B >= 10){
char ch = (char)(N % B + 55);
sb.append(ch);
}else{
sb.append(N%B);
}
N /= B;
}
System.out.println(sb.reverse());
br.close();
}
}