10진수의 소수를 2진수로 표현하기 - 파이썬
📌 문제출처 |
📖 5186. [파이썬 S/W 문제해결 구현] 1일차 - 이진수2
[문제 설명]
0보다 크고 1미만인 십진수 N을 이진수로 바꾸려고 한다.
예를 들어 0.625를 이진 수로 바꾸면 0.101이 된다.
N = 0.625
0.101 (이진수)
= 1*2-1 + 0*2-2 + 1*2-3
= 0.5 + 0 + 0.125
= 0.625
N을 소수점 아래 12자리 이내인 이진수로 표시할 수 있으면 0.을 제외한 나머지 숫자를 출력
13자리 이상이 필요한 경우에는 ‘overflow’를 출력하는 프로그램을 작성하시오.
[입력]
첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50
다음 줄부터 테스트 케이스의 별로 소수점 아래가 12자리 이내인 N이 주어진다.
3 |
[출력]
#1 101 |
💡 PASS
[파이썬 코드]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 5186. [파이썬 S/W 문제해결 구현] 1일차 - 이진수2 D2
for tc in range(1, int(input())+1):
val = float(input()) # 10진수 소수를 입력받아야하니 float
ret = [] # 2진수로 변환, 각자리를 문자열로
S=['9','9'] # S[0] 앞자리, S[1] 뒤자리 일단, 임의의 수로 넣음
# 소숫점 뒷자리가 0이고 2진수된 길이가 12까지
while( S[1] != '0' and len(ret)<=12):
# 2를 곱해서
val = val * 2
# print(val)
# 소숫점 앞 뒤로 쪼개 분리하기
S = str(val).split('.')
# 소숫점 앞 모으기(순서대로 2진수)
ret.append(S[0]) # 문자형태로 소숫점 앞 배열에 쌓기
# 소숫점 뒤 0이 될때까지 다시 반복
val = float('0.'+S[1])
# print(len(ret))
if len(ret) >= 13:
# 13자리 이상이 필요한 경우에는 ‘overflow’를 출력
print('#{} overflow'.format(tc))
else:
# 12자리 이내인 이진수로 표시할 수 있으면 0.을 제외한 나머지 숫자를 출력
print("#{}".format(tc),''.join(ret))
|
👀 [소감]
얼마만에 푸는거지.. 진짜 바닥부터 했네.. 10진수를 2진수로 바꾸는 것부터 공부했다...
https://blog.naver.com/chanseong1/221512567219
소숫점 앞부분은 나누기, 소숫점 뒷부분은 곱하기, 그리고 어떤 순서대로 2진수 배열하는지...
17번째 줄, 문자열에서 '0.' + 로 하는 것을 기피했는데 (시간 때문에) 12번 정도라서 그냥 했고,
str 과 float 변환을 사용하였다.
✍ [추가학습] 2진수를 10진수로 바꾸기 (소수점 포함)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# # 2진수를 10진수로 바꾸기 (소숫점포함)
def btod(binary): # 2진수를 넣었을 때
# 변환 할 10진수, 초기값 0
decimal = 0
# 소숫점을 기준으로 분할(문자열로)
S = str(binary).split('.')
front = S[0] # 앞자리
rear = S[1] # 소숫점 뒷자리
# 정수 부분 문자열의 각 자릿값에 2의 n 제곱형태로 가중치 계산 후, 합산
for i,digit in enumerate(front):
decimal += int(digit)*pow(2,len(front)-1-i)
# 소수 부분 문자열의 각 자릿값에 2의 -n 제곱형태로 가중치 계산 후, 합산
for i,digit in enumerate(front):
decimal += int(digit)*pow(2,-1-i) # -(1+i)
return decimal
|
'코딩테스트 \파이썬\자바 > SWEA D2' 카테고리의 다른 글
[SWEA][D2] 2005. 파스칼의 삼각형 D2 / 파이썬 / 자바 (0) | 2021.01.02 |
---|---|
[SWEA][D2] 5185. [파이썬 S/W 문제해결 구현] 1일차 - 이진수 D2 (16=>2) (1) | 2020.04.29 |
[SWEA][D2] 5174. [파이썬 S/W 문제해결 기본] 8일차 - subtree D2 (0) | 2020.04.16 |
[SWEA][D2] 5102. [파이썬 S/W 문제해결 기본] 6일차 - 노드의 거리 D2 (0) | 2020.04.03 |
[SWEA][D2] 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 .파이썬 (0) | 2020.03.18 |