피너클의 it공부방
백준 11005 진법 변환 2 (c++) : 피너클 본문
728x90
반응형
https://www.acmicpc.net/problem/11005
구현문제다.
10진수로 64823이 있다라 해보자. 우리는 이걸 어떻게 10진수로서 보고있을까
64823을 10으로 나눴을때 나머지는 3이다. 그럼 6482가 남는다.
6482를 10으로 나눴을때 나머지는 2이다. 그럼 648이 남는다.
648를 10으로 나눴을때 나머지는 8이다. 그럼 64이 남는다.
64를 10으로 나눴을때 나머지는 4이다. 그럼 6이 남는다.
6를 10으로 나눴을때 나머지는 6이다. 그럼 0이 남는다.
우리는 이렇게 보고있다.
예제를 봐보자
60466175 이 숫자를 36으로 나눴을때 나머지는 35이다. 그럼 1679615이 남는다.
1679615 이 숫자를 36으로 나눴을때 나머지는 35이다. 그럼 46655이 남는다.
이를 반복하면 된다.
while (n > 0) {
int m = n % b;
if (m < 10) ans = ans + (char)('0' + m);
else ans = ans + (char)('A' + m - 10);
cout << n/b << endl;
n /= b;
}
나머지가 10이하라면 숫자라는 뜻이니 숫자로 넣어주고
나머지가 10이상이면 문자라는 뜻이니 문자로 넣어준다.
for (int i = ans.length() - 1; i >= 0; i--) {
cout << ans[i];
}
중요한건 거꾸로 출력하는 것이다.
위에 10진수 64823을 보면 3 2 8 4 6 순으로 구해진걸 볼수있다.
그러니 출력할때도 거꾸로 출력하는 것이다.
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int n, b;
string ans = "";
int main()
{
cin >> n >> b;
while (n > 0) {
int m = n % b;
if (m < 10) ans = ans + (char)('0' + m);
else ans = ans + (char)('A' + m - 10);
cout << n/b << endl;
n /= b;
}
for (int i = ans.length() - 1; i >= 0; i--) {
cout << ans[i];
}
}
전체코드다.
728x90
반응형
'백준' 카테고리의 다른 글
백준 9506 약수들의 합 (c+++) : 피너클 (0) | 2024.11.24 |
---|---|
백준 32684 장기 (c++) : 피너클 (0) | 2024.11.23 |
백준 2745 진법 변환 (c++) : 피너 (0) | 2024.11.20 |
백준 26042 식당 입구 대기 줄 (c++) : 피너 (0) | 2024.11.18 |
백준 31926 밤양갱 (c++) : 피너클 (0) | 2024.11.17 |