728x90
● [문제번호 2745] 진법 변환
https://www.acmicpc.net/problem/2745
● 알아야 할 것
: 진법을 변환하는 방법
: 알파벳 대문자 출력을 위한 ASCII 코드
● 풀이 과정
: 정수형 자료형으로 주어지는 수 N을 입력받으면 11진법 이상에서 나오는 A ~ Z 의 수를 입력받을 수 없다.
따라서 문자열 string을 이용하여 N을 입력 받는다.
: 주어진 수 N의 뒷자리부터 B진법에 알맞는 가중치를 계속 곱하면서 변환된 수를 만들어간다.
주어진 조건에서 "B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다." 이므로
결과값은 int형으로 선언해도 된다.
● 주의 할 것
: 10진법을 넘어가는 숫자는 ASCII 코드를 참고하여 변환한다.
● 참고 할 것
: 진수 변환에 대한 이해
https://m.blog.naver.com/icbanq/221727893563
● 풀이 코드
#include <bits/stdc++.h>
using namespace std;
// 정수 자료형을 사용하면 10진법을 넘어가는 수의 알파벳대문자를 입력받지 못한다
string N;
// 10진법으로 변환된 수를 저장할 result 변수
int B, result;
// B진법의 수를 10진법으로 변환
void change()
{
// B의 n제곱으로 커지는 가중치
int weight = 1;
// 뒤에서부터 변환
for(int n = N.length() - 1; n >= 0; n--)
{
// 0 ~ 9 까지의 수 인 경우
if('0' <= N[n] && N[n] <= '9')
result += (N[n] - '0') * weight;
// A ~ Z 까지의 수 인 경우
else if('A' <= N[n] && N[n] <= 'Z')
result += (N[n] - 'A' + 10) * weight;
// 가중치를 B의 n제곱으로 만들어간다
weight *= B;
}
// 10진법으로 저장된 수 출력
cout << result;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// B진법 수 와 B진법 입력
cin >> N >> B;
// 10진법으로 변환
change();
return 0;
}
● [백준] - [알고리즘 기초 1/2] - [303 - 수학 1 (참고)] 문제집
번호 | 문제 번호 | 문제 이름 | 풀이 링크 |
1 | 11005 | 진법 변환 2 | https://pirateturtle.tistory.com/195 |
2 | 2745 | 진법 변환 | https://pirateturtle.tistory.com/196 |
3 | 11576 | Base Conversion | https://pirateturtle.tistory.com/197 |
4 | 11653 | 소인수분해 | https://pirateturtle.tistory.com/198 |
728x90
'Baekjoon > [Code.plus] 알고리즘 기초 1/2' 카테고리의 다른 글
[BOJ/백준] 1463 1로 만들기 (0) | 2021.07.30 |
---|---|
[BOJ/백준] 11653 소인수분해 (0) | 2021.07.29 |
[BOJ/백준] 11576 Base Conversion (0) | 2021.07.29 |
[BOJ/백준] 11005 진법 변환 2 (0) | 2021.07.29 |
[BOJ/백준] 17103 골드바흐 파티션 (0) | 2021.07.29 |
[BOJ/백준] 2089 -2진수 (0) | 2021.07.29 |
[BOJ/백준] 1212 8진수 2진수 (0) | 2021.07.29 |
댓글