Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

피너클의 it공부방

백준 2745 진법 변환 (c++) : 피너 본문

백준

백준 2745 진법 변환 (c++) : 피너

피너클 2024. 11. 20. 01:43
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
반응형
Comments