[백준] 2745번 진법 변환, 11005번 진법 변환 2
2745 진법 변환
문제
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진법으로 출력한다.
풀이)
string과 math 헤더를 사용하면 쉽게 풀 수 있는 문제였다.
과정
1. string을 이용해서 N을 입력받는다.
2. N의 맨 오른쪽부터 10진수로 변환해준 값을 구한다.
( 만약, A~Z 의 알파벳이라면 A = 10, B = 11, ..., Z = 35 가 되게끔 바꿔준다.
A는 아스키 코드 값으로 65, B는 아스키 코드 값으로 66,... 이러니깐 55를 빼면 된다.)
3. 변환해준 값을 모두 더한뒤 출력
코드)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> #include <iostream> #include <string> #include <math.h> using namespace std; int main() { string N; int B; cin >> N >> B; int tmp = 0, val =0; long long result = 0; for (int i = N.length()-1; i >=0; i--) { char c = N[i]; if (c >= 'A' && c <= 'Z') val = c - 55; else val = c - '0'; result += val * (int)pow((int)B, (int)tmp); tmp++; } printf("%lld", result); return 0; } | cs |
11005 진법변환2
문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
풀이)
진법변환 문제와 반대로 이번에 10진수를 B진수 값으로 바꾸는 문제였다.
계속 몫과 나머지를 이용해서 풀면 된다.
N이 0보다 클 때 까지
1. N을 B로 나눈 나머지를 구한다.
나머지가 10이상이면 알파벳으로 바꾼다. 나머지를 저장해둔다. (저장할 문자열의 가장 오른쪽에 저장)
2. N을 B로 나눈다.
코드)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> #include <iostream> #include <string> #include <math.h> using namespace std; int main() { int N, B; cin >> N >> B; string s = ""; while (N > 0) { int val = N % B; char c; if (val >= 10) { c = val + 55; } else c = val + '0'; s = c + s; N /= B; } cout << s; return 0; } | cs |