백준 - 11005번 진법 변환 2 (수학, 문자열, 아스키)

Kiwoong Park·2023년 5월 27일
0

문제

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

아래 그림과 같이 어떤 수를 n진법으로 표현하는 방법은 수를 n으로 몫이 0일 때까지 계속해서 나누면서 나머지를 차례로 저장하는 것이다.

C++ 풀이

위의 로직을 그대로 구현하면 아래와 같다.

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int N,B;
    cin >> N >> B;
    string ans="";

    while(N){
        if (B>10 && N%B>9)
            ans = char(N%B+55) + ans;
        else
            ans = char(N%B+48) + ans;
        
        N/=B;
    }
    cout << ans;
}

숏코딩 분석하기

같은 로직으로 재귀함수를 정의하여서 바로바로 printf로 출력하여 해결하였다.

#include <cstdio>

int N, X;

void F(int n) {
    if (n)
        F(n / X), printf("%c", n % X > 9 ? 'A' + n % X - 10 : '0' + n % X);
}

int main() {
    scanf("%d%d", &N, &X);
    F(N);
}
profile
You matter, never give up

0개의 댓글