코딩테스트/자바 문제풀이

[수학] 백준 2745 진법 변환

승요나라 2024. 8. 4. 23:25

2745번: 진법 변환

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

 

# 코드

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

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

        // N, B
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        String n = st.nextToken();
        long b = Long.parseLong(st.nextToken());

        // result
        long result = 0;
        for (int i = 0; i < n.length(); i++) {
            // N을 한 글자씩 가져와 아스키 코드로 변환한 ele
            long ele = (long)n.substring(i, i + 1).charAt(0);

            // 원소가 숫자인지, 알파벳인지에 따라 빼줘야하는 값이 다름
            if (ele <= 57) {
                // 9의 아스키 코드 : 57
                // ele가 숫자이면 48(=0의 아스키코드 값)을 빼줌
                result += (ele - 48) * (long)Math.pow(b, n.length() - 1 - i);
            } else {
                // A, B, ... : 65, 66, ...
                // ele가 알파벳이면 55(= 65-10)를 빼줌
                result += (ele - 55) * (long)Math.pow(b, n.length() - 1 - i);
            }
        }

        System.out.println(result);
        br.close();
    }
}
  • 10진수로의 변환 : 각 자리에 자릿수만 곱해서 더해주면 된다.
  • 예를 들면, 8진수 127은 10진수로 87이다.
    • (1 * 8^2) + (2 * 8^1) + (7 * 8^0) = 64 + 16 + 7 = 87
  • 또, 16진수 13F는 10진수로 319이다.
    • (1* 16^2) + (3 * 16^1) + (F * 16^0) = 256 + 48 + 15 = 319
  • 예시 입출력인 36진수 ZZZZZ 또한 동일한 방법으로 구할 수 있다.
    • (Z * 36^4) + (Z * 36^3) + (Z * 36^2) +  (Z * 36^1) +  (Z * 36^0) = 60466175