백준/C++

[백준] 11005번: 진법 변환 2 | C++ 풀이

성실한 당근농부 2023. 5. 30. 23:41

# 문제

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

 


 

# 풀이

바로 지난 글에서 풀이했던 진법 변환의 두 번째 문제다.

이번엔 반대로 10진법 수를 n진법으로 변환하는 문제인데, 앞선 문제를 풀이하지 않았다면 풀어보고 오는 것을 권한다. (2745번 풀이 글 링크)

2745번 문제를 풀었다면 이를 반대로 전개하면 되므로 쉽게 풀 수 있었을 거라 생각한다.

정답 소스코드를 보며 필요한 개념을 정리해보자.

 

#include <iostream>
using namespace std;

int main(){
	ios_base::sync_with_stdio(false);	// 두 표준 입출력 동기화 해제
    
    int n, b;
    string res;
    cin >> n >> b;

    while(n > 0){
        int tmp = n % b;
        if(0 <= tmp && tmp <= 9) res += (tmp+'0');
        else res += (tmp-10 + 'A');
        n /= b;
    }
    
    for(int i=res.length()-1; i>=0; i--){
        cout << res[i];
    }
    return 0;
}

이번 문제에서 출력해야 하는 진법 변환의 결과에는 알파벳도 포함될 수 있으므로 string 배열로 선언해주었다. 

지난 번과 다른 것은 0-9일 경우 아스키 코드 값을 이용해 '0'~'9'로 바꾸어주고, 그 외의 값일 경우에는 아스키 코드 값을 이용해 'A'~'Z'로 바꿔주는 것이다. 알파벳으로 변환 시에는 10이 A에 해당하므로 나머지에서 10을 뺀 값에 A의 아스키코드 값을 더해주어야 원하는 결과를 얻을 수 있음에 주의하자.

나머지 값에 대한 연산이 끝났다면 n을 b로 나누어주며 변환을 계속 진행해준다.

변환을 바친 후엔 저장한 결과를 뒤에서부터 출력해주면 최종 결과 값을 얻을 수 있다!

 

 

 

 

 

 


 

 

 

 

11005번: 진법 변환 2

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

www.acmicpc.net

 

728x90