티스토리 뷰

728x90
반응형

문제

 

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 

 

이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11,..., F: 15,..., Y: 34, Z: 35

 

입력

 

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) 

N은 10억보다 작거나 같은 자연수이다.

 

출력

 

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

 

풀이

 

이 문제도 누구도 시키지 않은 복잡한 방법으로 풀다가 수도 없이 틀리고 나서 싹 지우고 다시 풀었다.

 

그나마 이전 문제에 대한 경험이 있어서 시간이 덜 소모되기는 했다.

 

알고리즘은 아래와 같다.

 

  • 주어진 10진법 수를 B로 나눈 나머지를 문자열에 더해준다.
  • N을 N / B 로 바꿔준다.
  • N이 0이 될 때까지 반복한다.
  • 완성된 문자열을 뒤집어 출력한다.

오랜만에 수학문제 푸는 기분이었지만 시간이 너무 오래 걸려버렸다..

 

아래는 코드.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Prob11005 {

	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) {
			int temp = n % b;
			if (temp < 10) {
				sb.append(temp);
			} else {
				sb.append((char)(temp - 10 + 'A'));
			}
			n /= b;
		}

		System.out.println(sb.reverse());
	}
}

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함