진법 변환
문제
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진법으로 출력한다.
예제 입력 1
ZZZZZ 36
예제 출력 1
60466175
제출 코드
#include <stdio.h>
#include <math.h>
#include <string.h>
int main() {
char input[100]; // 사용자로부터 입력받을 문자열을 저장할 배열
int result = 0; // 최종적으로 계산될 10진수 결과를 저장할 변수
int n, len, num[100]; // n은 사용자로부터 입력받은 진법, len은 입력 문자열의 길이, num은 각 자릿수의 숫자 값을 저장할 배열
scanf("%s %d", input, &n); // 사용자로부터 진법 변환할 숫자(문자열 형태)와 진법을 입력받음
len = strlen(input); // 입력받은 문자열의 길이를 계산
for (int i = 0; i < len; i++) {
num[i] = (int)input[i]; // 문자열의 각 문자를 아스키 코드로 변환
if (num[i] > 64) // 문자가 A부터 Z인 경우 (아스키 코드에서 대문자 A는 65)
num[i] -= 55; // A는 10, B는 11, ... 이 되도록 조정 ('A'의 아스키 코드 값인 65에서 55를 빼면 10이 됨)
else
num[i] -= 48; // 문자가 0부터 9인 경우 (아스키 코드에서 '0'은 48)
}
int size = len-1; // 가장 높은 자리수의 지수를 계산 (예: 16진수의 FAB에서 A의 지수는 1)
for (int i = 0; i < len; i++) {
num[i] *= pow(n, size); // 각 자리의 숫자에 해당하는 값을 계산 (진법^n * 자리값)
size--; // 다음 자릿수로 이동하며 지수 감소
}
for (int i = 0; i < len; i++) {
result += num[i]; // 모든 자릿수의 값을 더해 최종 결과 계산
}
printf("%d", result); // 계산된 10진수 결과 출력
return 0;
}
'💎 백준 > 🎇 C언어' 카테고리의 다른 글
[C언어] 백준 2720번 세탁소 사장 동혁 (0) | 2024.02.12 |
---|---|
[C언어] 백준 11005번 진법 변환 2 (0) | 2024.02.12 |
[C언어] 백준 2563번 색종이 (0) | 2024.02.11 |
[C언어] 백준 10798번 세로읽기 (0) | 2024.02.11 |
[C언어] 2566번 최댓값 (0) | 2024.02.11 |