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와 세트문제
'백준 c++ > (1-1)백준 c++ 알고리즘 기초' 카테고리의 다른 글
백준 11653 c++ 소인수분해 (0) | 2022.07.17 |
---|---|
백준 11576 c++ Base Conversion (0) | 2022.07.16 |
백준 9095 c++ 1, 2, 3 더하기 (0) | 2022.07.14 |
백준 11727 c++ 2xn 타일링 2 (0) | 2022.07.14 |
백준 11726 c++ 2xn 타일링 (0) | 2022.07.14 |