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 |
댓글