문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다
풀기 전 로직 생각
- 10진법 수를 <N> 을int형 그리고 <B>진법을int형으로 선언하고 입력받는다.
- result라는 진법으로 인한 결과값을 string으로 선언 해둔다. 알파벳저장도 해야하니깐.
- 10진법을 바꿀땐 127%16...7%16 을하며 진행되기때문에 while문으로 몫이 0이 될때까지 반복
- while문안에서 N을B진법으로 나눈 나머지가 0부터 9사이면 아스키코드로 48을 더한 후 char형으로 변환후 result에 저장
- 그 외일경우 'A'값을 더하고 10을 뺀 아스키코드 값을 char형으로 result에 저장
- N /= B를 통해 N값을 줄여나간다.
- 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형으로 바꿨었는데 글쓰면서 생각해보니 그럴 필요가 없다는걸 느끼고 즉시 코드수정 히힛;;
결과

이상입니다. 끗
'백준' 카테고리의 다른 글
[백준] 2903번 - 중앙 이동 알고리즘 C++ (0) | 2024.05.13 |
---|---|
[백준] 2720번 - 세탁소 사장 동혁 C++ (0) | 2024.05.09 |
[백준] 2563번 - 색종이 C++ (0) | 2024.05.04 |
[백준] 25206번 - 너의 평점은 C++ (0) | 2024.04.22 |
[백준] 1316번 - 그룹 단어 체커 <C++> (0) | 2024.04.21 |