[백준] 11005번 - 진법 변환2 C++

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

풀기 전 로직 생각
  1. 10진법 수를 <N> 을int형 그리고 <B>진법을int형으로 선언하고 입력받는다.
  2. result라는 진법으로 인한 결과값을 string으로 선언 해둔다. 알파벳저장도 해야하니깐.
  3. 10진법을 바꿀땐 127%16...7%16 을하며 진행되기때문에 while문으로 몫이 0이 될때까지 반복
  4. while문안에서 N을B진법으로 나눈 나머지가 0부터 9사이면 아스키코드로 48을 더한 후 char형으로 변환후 result에 저장
  5. 그 외일경우 'A'값을 더하고 10을 뺀 아스키코드 값을 char형으로 result에 저장
  6. N /= B를 통해 N값을 줄여나간다.
  7. while문을 빠져나와서 result를 역순으로 출력하면 그게 결과값.
#include <iostream>
using namespace std;

int main(){

	int B; //진법

	int N; //입력할 수
	string result;

	cin >> N >> B;

	while (N) { //몫이 0이 될때까지 반복
		if (N % B >= 0 && N % B <= 9) { //intN을 B로 나눈 나머지가 0~9값이면 char형으로 result에 추가.
			result += char(N % B + 48); //char형으로 넣기
		}
		else {
			result += char((N % B + 'A')-10); //'A'를 더하고 10을 빼면 거기에 해당하는 알파벳이 나옴.
		}
		N /= B; //intN을 B로 나누어 intN에 다시 넣고 반복시킨다.
	}

	for (int i = result.length()-1; i >= 0; i--) {
		cout << result[i];
	}
	
	return 0;
}

 

처음에 N을 string으로 입력받고 stoi로 int형으로 바꿨었는데 글쓰면서 생각해보니 그럴 필요가 없다는걸 느끼고 즉시 코드수정 히힛;;

 

결과

 

 

이상입니다. 끗