[백준 2745] 진법 변환

Groundstone51·2023년 11월 19일

백준 혼공

목록 보기
4/7

문제

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. 진법=> 예를 들면 31이라면
    11111(2)= (2^4)1+(2^3)1+(2^2)1+(2^1)1+(2^0)1
    37(8)= (8^1)
    3+(8^0)*7
  2. 즉 배열의 길이에서 1을 뺀 값이 처음 지수, 그 후 0까지 1씩 감소
#include<stdio.h>
#include<math.h>
#include<string.h>
int main() {
	char n[101] = { 0 };
	int b = 0;
	scanf("%s %d", n, &b);//b진법으로 표현된 수 n을 입력받는다. 
	int len = strlen(n);
	int result = 0;
	for (int i = 0; i < len; i++) {
		int digit = 0;
		if (n[i] >= 'A' && n[i] <= 'Z') {//알파벳으로 표현된 수는 10이상인 수, A의 ASCII코드는 65,따라서 55를 빼는 것
			digit = n[i] - 55;
		}
		else if (n[i] >= '0' && n[i] <= '9') {
			digit = n[i] - '0';//int가 아니라 char로 받았기에 ASCII코드를 이용
		}
		result += digit * pow(b, len - 1 - i);//POW는 b^len-1-i를 만드는 함수
	}
	printf("%d", result);
}

One More Thing

  1. 진수에 대한 개념이 너무 오랜만이라 진수를 알아가는 데 시간이 조금 걸렸다.
  2. 숫자도 배열에서 표현되는 건 문자란 걸 깜빡함
profile
I'm always be here. Because I'm stone

0개의 댓글