Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 2745번: 진법 변환 본문

Study/Algorithm

BOJ (C/C++) 2745번: 진법 변환

hwooo 2023. 4. 27. 15:29

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

 

2745번: 진법 변환

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

www.acmicpc.net

 


풀이

B진법의 수를 10진수로 바꿀 땐 각 자리의 수 * B^(자릿수)이므로 해당 공식을 이용했다.뒷자리부터 계산했고, 이 때 마지막 자릿수에 곱해지는 값은 B^0이므로 수의 전체 길이에서 현재 자릿수를 빼주어 맞췄다.또한 N이 문자열로 주어지는 경우 'Z'- 'A' = 25로 문제에서 주어진 'A' = 10 의 조건을 만족하지 못한다. 따라서 +10 을 더해줌

코드

#include <stdio.h>
#include <iostream>
#include <string>
#include <math.h>
using namespace std;

int main() {
	int B, sum = 0;
	string S;

	// input
	cin >> S;
	scanf("%d", &B);


	int len = S.size();
	for (int i = len - 1; i >= 0; i--) { // 뒷자리부터 계산 시작

		if ('A' <= S[i] && S[i] <= 'Z') {
			sum += pow(B, len - i - 1)*(S[i] - 'A' + 10); // 'A' = 10이므로 10을 더해줌
		}

		else sum += pow(B, len - i - 1)*(S[i] - '0'); // 맨 뒷자리의 지수는 B^0
	}

	printf("%d", sum);
	return 0;
}