OneDev
[Java] 백준 2745 - 진법 변환 본문
[문제]
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
[입력]
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
[출력]
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
< 풀이 >
① B 진법 수 N 을 문자열로 받는다
② N의 각 자리의 문자를 B 진법에 맞게 바꿔 결과값에 담는다

<소스 코드>
import java.util.Arrays;
import java.util.Scanner;
public class B2745 {
// 문자 c 를 정수로 변환하는 메소드
static int atoi(char c)
{
// 0 ~ 9 인 경우
if (c >= '0' && c <= '9')
{
return (c - '0');
}
// 10 ~ 36 인 경우
else if (c >= 'A' && c <= 'Z')
{
return (c - 'A' + 10);
}
return 0;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//[입력] 첫째 줄에 N과 B가 주어진다((2 ≤ B ≤ 36)
String n = scan.next();
int b = scan.nextInt();
int result = 0;// 결과를 저장할 변수
/* 반복문에 사용할 변수 */
int i = n.length() - 1; // 문자열 N 의 마지막 인덱스부터 계산할 것임
char c; // 문자열의 N 의 각 문자를 보관할 변수
int exp = 0; // 거듭제곱 연산시 지수로 사용될 변수
// 변환
while (i >= 0)
{
c = n.charAt(i); // i 번째 문자 (뒤에서부터 시작)
result += atoi(c) * Math.pow(b, exp); //(해당 문자가 B진법에서 가리키는 숫자) * (B 의 exp 승)
exp++;
i--;
}
System.out.println(result);
}
}
'자료구조&알고리즘 > BOJ' 카테고리의 다른 글
| [Java] 백준 2675 - 문자열 반복 (0) | 2023.09.28 |
|---|---|
| [C] 백준 10988- 팰린드롬인지 확인하기 (0) | 2023.07.19 |
| [C] 백준 9086 - 문자열 (0) | 2023.07.18 |
| [JAVA] 백준 2563- 색종이 (0) | 2023.06.03 |
| [JAVA] 백준 25501번 : 재귀의 귀재 (0) | 2023.01.24 |
Comments