코딩테스트 연습/Baekjoon
[Baekjoon] 11005번 : 진법 변환 2 (c++)
수기
2022. 3. 31. 19:43
https://www.acmicpc.net/problem/11005
11005번: 진법 변환 2
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
mod에 N을 B로 나눈 나머지를 차례대로 저장하고, N은 다시 B로 나누어준다. 이것을 N (마지막 값이 몫)이 B보다 크거나 같을때까지 반복한다. alphabet배열에는 19A~Z까지 저장해두고, alphabet[mod[i]]를 이용하여 진수에 맞는 값을 출력한다.
alphabet[N]이 마지막에 남는 몫 값이고, mod배열에 저장된 나머지들을 거꾸로 출력하면 10진수 수를 B진법으로 바꿀 수 있다.
코드
//11005
#include <iostream>
#include <string>
using namespace std;
#define SIZE 1000001
int main(int argc, const char * argv[]) {
cin.tie(NULL);
ios::sync_with_stdio(0);
int N,B;
cin >> N >> B;
int mod[SIZE];
char alphabet[36];
for(int i=0;i<10;i++)alphabet[i] = '0'+i;
for(int i=0;i<26;i++ )alphabet[i+10] = 'A'+i;
int j=0;
while( N >= B ){
mod[j] = N%B;
N = N / B;
j++;
}
cout<<alphabet[N];
for(int i=j-1;i>=0;i--)cout<<alphabet[mod[i]];
return 0;
}