본문 바로가기
Develop/Python + SWEA

[SW Expert Academy] 5186. 이진수2

by Tarra 2022. 3. 24.

5186. 이진수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이 주어진다.

 


[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

 

 

 

 

풀이)

 

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 1번 풀이
= int(input())
for _ in range(T):
    n = float(input())
    answer = ""
    temp = 0
    i = -1
    while True:
        if temp + 1 * 2**<= n:
            temp += 1 * 2**i
            answer += "1"
            i -= 1
        else:
            answer += "0"
            i -= 1
 
        if temp == n:
            break
 
        if len(answer) > 13:
            answer = False
            break
 
    if not answer:
        print(f"#{_ + 1} overflow")
    else:
        print(f"#{_ + 1} {answer}")
 
 
 
# 2번 풀이
 
= int(input())
for _ in range(T):
    n = float(input())
    answer = ""
    while n:
        n = n * 2
        if n >= 1:
            answer += "1"
            n -= 1
 
        elif n < 1:
            answer += "0"
 
        if len(answer) > 13:
            answer = "overflow"
            break
    print(f"#{_ + 1} {answer}")
cs

 


문제 출처 : https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.

학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.