a / b 출력

훈이는못말려·2023년 7월 22일
0

Algorithm

목록 보기
1/7
post-thumbnail

문제

두 자연수 a,b를 입력받아 a/b 결과를 소수점 20째자리까지 출력하는 프로그램을 작성해보세요.

입출력 예제

예제1예제2
입력: 3 5입력: 3 7
출력: 0.60000000000000000000출력: 0.42857142857142857142

해결

  1. / 를 이용한 해결

    / 를 사용해서 계산하면, 나와야하는 출력값과 다르다는 것을 알 수 있다.

    a, b = 3, 5
    print(f"{a/b:.20f}")
    
    // 0.59999999999999997780

    일반적으로 컴퓨터 시스템은 유한한 메모리를 가지고 있으며, 부동 소수점 연산은 이진수로 표현되기 때문에 정확한 10진수 표현은 제한된다. 이로 인해 매우 작거나 큰 수의 경우에는 유효 숫자를 제한하여 근사치로 표현하게 된다.
    3/5는 정확히 0.6이다. 하지만 소수점 20자리까지 표현하려고 하면 컴퓨터에서 근사치로 나타낼 수밖에 없다.

  2. 나누기를 직접 반복 ⭕️

    ab로 나눈 나머지에 10을 곱한 값을 b로 나눴을 때의 몫을 순서대로 적는 것을 계속 반복한다.

    a, b = 3, 5
    
    # 정수 부분을 먼저 출력합니다.
    print(f"{a//b}.", end="")
    
    # a를 b로 나눈 나머지를 시작으로
    # 소수점 자리를 하나씩 계산합니다.
    a %= b
    for _ in range(20):
       # 나머지에 10 곱한 값을 기준으로
       # b로 나누었을 떄의 몫을 구해줍니다.
       a *= 10
       print(a // b, end="")
    
       # a를 b로 나눈 나머지를 게속 갱신해줍니다.
       a %= b
    
    // 0.60000000000000000000

1개의 댓글

comment-user-thumbnail
2023년 7월 22일

와우 저도 이 문제 푸는데 막혔는데 해결법 정리해주셔서 감사합니다 ^^

답글 달기