10827 a^b

DONGJIN IM·2022년 6월 28일
0

코딩 테스트

목록 보기
117/137

문제 이해

실수 a와 정수 b가 주어질 때
aba^b 값을 정확하게 계산하는 문제이다


문제 풀이

이 문제가 나온 이유는, 실수의 제곱이라는 것이 CS적으로 보았을 때 절대로 정확하게 나올 수가 없다.

아무래도 컴퓨터는 2진법을 활용하다보니, 소수점을 나타내는데에 있어 Sign bit, exponent bit, bias bit 3개를 활용하여 소수점을 나타내게 되고, 이것을 통해 곱연산을 할 경우 손실이 발생할 수 밖에 없는 것이다.

따라서 바로 a**b를 수행하면 절대로 원하는 결과를 얻을 수 없다.

자연수(정수)에서는 이런 문제가 존재하지 않는다. 따라서, a를 정수로 나타낸 이후 aba^b 연산을 수행하고, a의 소수 위치를 고려하여 연산 결과값에 '.'을 적절한 위치에 붙여주는 식으로 코드를 짜야 한다


코드

a,b=list(input().split())

p = len(a[a.index('.')+1:]) # a의 소수점 위치. a = A * 10^p(A : 자연수)
a = a.replace('.','') # a의 소수점을 지워 A로 만듦

result = str(int(a)**int(b)) # A^b 연산 수행
p=str((10**p)**int(b)) # (10^p)^b 연산 수행
index = len(result)-len(p)+1
# index : 소수점을 붙여야 할 위치

if index >=0:
    print(result[:index]+'.'+result[index:])
else:
    print('0.'+'0'*(-index)+result)

결과

  • 컴파일 에러
    (1) Python 코드인데 JAVA로 실행함
    (2) print()에서 소괄호를 빼버림

  • 런타임 에러
    위처럼 A10pA*10^p로 만들지 않고 바로 apa^p 연산을 수행하여 에러가 발생

profile
개념부터 확실히!

0개의 댓글

관련 채용 정보