Algorithm(BOJ)/String
[C++] 백준 2745번 - 진법 변환
Nanyoung Kim
2021. 7. 7. 20:10
728x90
문제 링크 : https://www.acmicpc.net/problem/2745
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
문제
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진법으로 출력한다.
접근 방법
입력한 문자열 N을 한글자씩 따라가면서 10진수로 변환해나간다.
해당 char 이 '0' ~ '9'인 경우와 'A'~'Z'인 경우로 나눠서 계산한다.
//
// 문자열_BOJ2745_진법변환.cpp
// Coding_Test_Practice
//
// Created by 김난영 on 2021/07/07.
// Copyright © 2021 KimNanyoung. All rights reserved.
//
#include <iostream>
#include <cmath>
using namespace std;
int main(){
string N;
int B;
cin >> N >> B;
int len = (int)N.length();
int bit = len-1;
int ans = 0;
for(int i = 0; i<len; i++){
char c = N[i];
int num = 0;
if(65<=c && c<=90) num = c - 55; //'A' ~ 'Z'
else num = c - '0';//'0' ~ '9'
ans += num * pow(B, bit-i);
}
cout << ans;
\
return 0;
}
728x90