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진법으로 출력한다.
코드
n, b = input().split() # b진법 수 n
b = int(b)
num_dict = {chr(65+i):10+i for i in range(26)}
ans = 0
n = n[::-1]
for i in range(len(n)):
if n[i].isalpha():
ans += num_dict[n[i]] * (b ** i)
else:
ans += int(n[i]) * (b ** i)
print(ans)
문자열을 뒤집지 않고 하려면 다음과 같이 하면 된다.
n, b = input().split() # b진법 수 n
b = int(b)
num_dict = {chr(65+i):10+i for i in range(26)}
ans = 0
l = len(n)
for i in range(l):
if n[i].isalpha():
ans += num_dict[n[i]] * (b ** (l-i-1))
else:
ans += int(n[i]) * (b ** (l-i-1))
print(ans)
- 파이썬의 int 함수 이용
n, b = input().split() # b진법 수 n
b = int(b)
print(int(n, b))
파이썬의 int 함수는 2번째 인자로 몇진법인지 넣으면 1번째 인자로 받은 문자열에 대해 10진수로 변환하여 리턴해준다.
'문제풀이 > 수학' 카테고리의 다른 글
[Python/파이썬] 백준 11653번 소인수분해 (0) | 2023.02.05 |
---|---|
[Python/파이썬] 백준 1934번 최소공배수 (0) | 2023.02.05 |
[Python/파이썬] 백준 2609번 최대공약수와 최소공배수 (0) | 2023.02.05 |
[Python/파이썬] 백준 22864번 피로도 (0) | 2023.02.04 |
[Python/파이썬] 백준 5618번 공약수 (0) | 2023.02.04 |
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진법으로 출력한다.
코드
n, b = input().split() # b진법 수 n b = int(b) num_dict = {chr(65+i):10+i for i in range(26)} ans = 0 n = n[::-1] for i in range(len(n)): if n[i].isalpha(): ans += num_dict[n[i]] * (b ** i) else: ans += int(n[i]) * (b ** i) print(ans)
문자열을 뒤집지 않고 하려면 다음과 같이 하면 된다.
n, b = input().split() # b진법 수 n b = int(b) num_dict = {chr(65+i):10+i for i in range(26)} ans = 0 l = len(n) for i in range(l): if n[i].isalpha(): ans += num_dict[n[i]] * (b ** (l-i-1)) else: ans += int(n[i]) * (b ** (l-i-1)) print(ans)
- 파이썬의 int 함수 이용
n, b = input().split() # b진법 수 n b = int(b) print(int(n, b))
파이썬의 int 함수는 2번째 인자로 몇진법인지 넣으면 1번째 인자로 받은 문자열에 대해 10진수로 변환하여 리턴해준다.
'문제풀이 > 수학' 카테고리의 다른 글
[Python/파이썬] 백준 11653번 소인수분해 (0) | 2023.02.05 |
---|---|
[Python/파이썬] 백준 1934번 최소공배수 (0) | 2023.02.05 |
[Python/파이썬] 백준 2609번 최대공약수와 최소공배수 (0) | 2023.02.05 |
[Python/파이썬] 백준 22864번 피로도 (0) | 2023.02.04 |
[Python/파이썬] 백준 5618번 공약수 (0) | 2023.02.04 |