본문 바로가기
프로그래밍/알고리즘

백준 11005번: 진법 변환 2

by 만디기 2024. 2. 27.

문제 : https://www.acmicpc.net/problem/11005

 

11005번: 진법 변환 2

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

www.acmicpc.net

 

문제 자체는 간단한 문제였지만, 다른 사람들의 답을 보니 기발한 것이 있어 기록한다.

(1) 내 해답 : char 배열을 하나 만들고, 나머지를 계산하여 배열에 넣은 후 역으로 출력한다.

#include <cstdio>
#include <cstring>

int main()
{
    int N = 0, B = 0, i = 0;
    char result[35] = {0, };

    scanf("%d %d", &N, &B);

    while ( N > 0 )
    {
        result[i] = ( N % B >= 10 ) ? ( N % B ) + 55 : ( N % B ) + 48;
        N /= B;
        i++;
    }

    for ( int i = strlen(result) - 1 ; i >= 0 ; i-- )
    {
        putchar(result[i]);
    }
   
    return 0;
}

 

(2) 다른 해답

- 나와 비슷한 방식의 해답

ans = ''
x, y = map(int, input().split())
while x:
    r = x % y
    if 0 <= r <= 9:
        ans += str(r)
    else:
        ans += chr(ord('A') + r - 10)
    x //= y
print(ans[::-1])

 

- (Python) 문자열 앞에 계속 붙여나가는 방식으로, 문자열을 뒤집는 방식을 사용하지 않고 출력

n,b=map(int,input().split())
s=""
while n:s=chr(n%b+[48,55][n%b>9])+s;n//=b
print(s)

 

- 재귀를 이용하여, 문자열을 뒤집는 방식을 사용하지 않고 바로 출력

#include <cstdio>
int N, X;
void DtoX(int n) {
	if (n) DtoX(n / X), printf("%c", n%X > 9 ? ('A' + n%X - 10) : ('0' + n%X));
}
int main() {
	scanf("%d%d", &N, &X);
	DtoX(N);
}