10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
아래 그림과 같이 어떤 수를 n진법으로 표현하는 방법은 수를 n으로 몫이 0일 때까지 계속해서 나누면서 나머지를 차례로 저장하는 것이다.
위의 로직을 그대로 구현하면 아래와 같다.
#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);
}