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
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[수학] 백준 1110 더하기 사이클 (0) | 2024.08.06 |
---|---|
[수학] 백준 5618 공약수 (0) | 2024.08.05 |
[수학] 백준 1978 소수 찾기 (0) | 2024.08.03 |
[수학] 백준 22864 피로도 (0) | 2024.08.02 |
[수학] 백준 2581 소수 (0) | 2024.08.01 |