hwooo
BOJ (C/C++) 2745번: 진법 변환 본문
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;
}
'Study > Algorithm' 카테고리의 다른 글
| BOJ (C/C++) 2903번: 중앙 이동 알고리즘 (0) | 2023.04.27 |
|---|---|
| BOJ (C/C++) 11005번: 진법 변환 2 (0) | 2023.04.27 |
| BOJ (C/C++) 9205번: 맥주 마시며 걸어가기 (0) | 2023.04.26 |
| BOJ (C/C++) 14496번: 그대, 그머가 되어 (0) | 2023.04.25 |
| BOJ (C/C++) 3055번: 탈출 (0) | 2023.03.25 |