백준 c++/(1-1)백준 c++ 알고리즘 기초

백준 2745 c++ 진법 변환

현구구 2022. 7. 15. 17:43

https://www.acmicpc.net/problem/2745

 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 

www.acmicpc.net

 


문제

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

첫째 줄에 B진법 수 N을 10진법으로 출력한다.

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

int main()
{
	string N;//10진법 이상일 경우 문자가 들어갈 수 있기에 string으로 입력
	int B;
	cin >> N;
	cin >> B;//본래 진법
	long long int result = 0;
	for (int i=0;i<N.size();i++)
	{
		int plus = 0;//B진법의 값에 진법 제곱값을 곱해준 값
		int tmp =0;//B진법의 각 자리 값
		if (N[i] >= '0' && N[i] <= '9')
		{
			tmp = int(N[i]-'0');//숫자일 경우 tmp
		}
		else if(N[i] >= 'A' && N[i] <= 'Z')
		{
			tmp = int(N[i]-'A')+10;//문자일 경우 tmp
		}
		plus = tmp * pow(B,N.size()-i-1);//제곱을 곱해서 result값에 추가
		result = result + plus;
	}
	cout << result;
}

 


 

16진수를 10진수로 만드는 법을 참고하여 코드를 짜보았다

1의 자리에 본래 진법의 0승

10의 자리에 본래 진법의 1승

100의 자리에 본래 진법의 2승

을 하여 다 더해주면 된다.

 

Z의 경우 숫자로 표현할 경우 35이므로 예제는 

35 35 35 35 35 이런 식이다.

35 x 1 = 35

35 x 36의 1승 = 1260

35 x 36의 2승 = 45360

35 x 36의 3승 = 1632960

35 x 36의 4승 = 58786560

이 값들을 다 더하면 60466175 이 나온다

 

https://mun-coding.tistory.com/41

백준 11005와 세트문제