본문 바로가기
C++ 코딩 문제 풀이/백준

[Baekjoon] 2745번: 진법 변환

by 섬댕이 2023. 5. 6.

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

 

2745번: 진법 변환

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

www.acmicpc.net

 


 

문제 해결 과정

착안

숫자 0~9에서 문자 A~Z로 넘어갈 때의 ASCII Code가 연속적이지 않다는 것만 알고 있다면, 실제로 사람이 진법을 변환하는 과정과 동일하게 간단하게 코딩하여 풀 수 있다.

 

구현

본인은 사실 특정한 문자를 ASCII Code로 나타내면 몇인지 전혀 모른다(구글링의 폐해? 단순 암기하는 걸 정말 세상에서 제일 싫어함). 다만, 숫자 9에서 문자 A로 넘어갈 때 ASCII Code가 연속적으로 증가하지 않고 훅 건너 뛴다는 것은 알고 있다. 그래서 ASCII Code를 실질적으로 가리키는 수로 변환하는 과정을 아래와 같이 프로그래밍 했다(아래 코드에서 삼항연산자 부분).

 

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <iostream>
#include <string>
#include <cmath>

using namespace std;

int main()
{
	string n;
	int radix;
	int result = 0;

	cin >> n >> radix;

	for (size_t i = 0; i < n.size(); i++)
		result += (n[i] <= '9' ? n[i] - '0' : n[i] - 'A' + 10) * static_cast<int>(pow(radix, n.size() - 1 - i));

	cout << result;

	return 0;
}

 

실행 결과

* 코드를 제출한 시점과 글 작성 시점이 달라, 주석 추가 등의 이유로 실행 결과의 코드 길이는 상이할 수 있음.

'C++ 코딩 문제 풀이 > 백준' 카테고리의 다른 글

[Baekjoon] 1193번: 분수찾기  (0) 2023.05.06
[Baekjoon] 2292번: 벌집  (0) 2023.05.06
[Baekjoon] 11005번: 진법 변환2  (0) 2023.05.06
[Baekjoon] 2563번: 색종이  (0) 2023.05.06
[Baekjoon] 10798번: 세로읽기  (0) 2023.05.05

댓글