피너클의 it공부방
백준 2745 진법 변환 (c++) : 피너 본문
728x90
반응형
https://www.acmicpc.net/problem/2745
구현문제다.
진법을 어떻게 변화시키냐 이게 문제인데 이진수와 십진수를 예로 들어보자
이진수 10101 이 있다고 했을때
1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 인 것은 알것이다.
십진수 56473 이 있다고 했을때는
5 * 10^4 + 6 * 10^3 + 4 * 10^2 + 7 * 10^1 + 3 * 10^0 인것도 알것이다.
그럼 예제에 나온 ZZZZ는 어떻게 해야할까?
Z가 35라고 나왔으니 위에와 똑같이 만들면
1 * 35^3 + 1 * 35^2 + 1 * 35^1 + 1 * 35^0 이다.
이를 코드로 짜면 된다.
string n;
int b;
long long sum = 0;
n과 b는 입력받는 변수고 sum에는 십진수로 변환된 값이 들어갈것이다.
cin >> n >> b;
int len = n.length();
값을 입력받고 미리 문자열의 길이를 저장해놓는다.
for (int i = len - 1; i >= 0; i--) {
char a = n[i];
if ('0' <= a && a <= '9') sum += (a - '0') * pow(b, len - i - 1);
else sum += (a - 'A' + 10) * pow(b, len - i - 1);
}
다음에는 간단하다. 마지막부터 반복문을 돌려 가장 낮은 숫자부터 계산하게 했다. 그냥 0부터 해도 된다.
a에 계산할 문자를 집어넣고
만약 a가 숫자라면 숫자로서 계산을 하고
문자라면 문자로서 계산하면 끝이다.
pow는 제곱 함수로 pow(x, y) = x의 제곱이다.
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
string n;
int b;
long long sum = 0;
int main()
{
cin >> n >> b;
int len = n.length();
for (int i = 0; i < len; i++) {
char a = n[i];
if ('0' <= a && a <= '9') sum += (a - '0') * pow(b, len - i - 1);
else sum += (a - 'A' + 10) * pow(b, len - i - 1);
}
cout << sum << endl;
}
전체코드다.
728x90
반응형
'백준' 카테고리의 다른 글
백준 32684 장기 (c++) : 피너클 (0) | 2024.11.23 |
---|---|
백준 11005 진법 변환 2 (c++) : 피너클 (0) | 2024.11.22 |
백준 26042 식당 입구 대기 줄 (c++) : 피너 (0) | 2024.11.18 |
백준 31926 밤양갱 (c++) : 피너클 (0) | 2024.11.17 |
백준 32651 인간은 무엇인가 (c++) : 피너클 (0) | 2024.11.15 |
Comments