JAVA/Coding Test

[JAVA] 백준 11005 진법 변환 2_일반 수학1

오늘도개발 2023. 4. 12. 16:34

https://www.acmicpc.net/problem/11005

 

11005번: 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를

www.acmicpc.net

 

 접근 : 

 

 - 십진수 와 진법을 입력받는다.

 

 - 입력 받은 십진수를 입력 받은 진법의 수로 변환한다.

 

 코드 구현 : 

 

import java.io.*;
import java.util.Stack;

public class Main {

	// 입력 받은 숫자를 level 진수로 변환
	static class ParseNum {
		private long num;
		private int level;

		public ParseNum(long num, int level) {
			this.num = num;
			this.level = level;
		}

		// 입력 받은 10진수를 N 진수로 변환 후 리턴
		public String parsetoLevel() {

			long temp_num = this.num;
			int temp = 0;
			// 순서를 뒤집기 위한 character stack
			Stack<Character> stack = new Stack<>();
			StringBuilder sb = new StringBuilder();
			char one_number;

			while (temp_num > 0) {
				temp = (int) temp_num % this.level;
				one_number = (temp >= 10) ? (char) (temp + (int) '0' + 7) : (char) (temp + '0');
				stack.push(one_number);
				temp_num /= this.level;
			}

			// 스택의 문자를 문자열로 저장
			while (!stack.empty()) {
				sb.append(stack.pop());
			}

			return sb.toString();
		}

	}

	public static void main(String[] srgs) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String[] inputs = br.readLine().split(" ");
		ParseNum parse_number = new ParseNum(Long.parseLong(inputs[0]), Integer.parseInt(inputs[1]));
		System.out.println(parse_number.parsetoLevel());
		br.close();
	}
}