JAVA/Coding Test

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

오늘도개발 2023. 4. 11. 11:12

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

 

2745번: 진법 변환

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

www.acmicpc.net

 

 접근 : 

 

 - 숫자와 진수를 입력받는다.

 

 - 입력 받은 숫자를 정수로 변환한다.

 

 - 10이상의 숫자를 해당 10진수의 수로 변환한다. ( ex> A : 10, B : 11)

 

 - 10진수  =  (입력받은 진수 ^ 각자리수) * 해당 자리수의 값 으로 계산하여 출력한다.

 

 - 결과값이 항상 10억보다 작거나 같으므로 int 대신 long 타입으로 반환한다.

 

 

 코드 구현 : 

 

import java.io.*;

public class Main {

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

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

		// 입력 받은 문자열 숫자를 10진수로 변환 후 리턴
		public long parsetoDecimal() {
			long result = 0;
			int temp_parse_num = 0;
			int temp = 0;

			for (int i = 0; i < num.length(); i++) {

				// 아스키 코드를 숫자로 변환
				temp = (int) num.charAt(i);

				// 10 이상의 문자를 숫자로 변환
				temp_parse_num = (temp >= (int) 'A') ? (temp - (int) '0' - 7) : temp - '0';

				result += Math.pow(level, num.length() - i - 1) * temp_parse_num;

			}

			return result;
		}
	}

	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(inputs[0], Integer.parseInt(inputs[1]));
		System.out.println(parse_number.parsetoDecimal());

		br.close();
	}
}