백준문제풀이

백준 문제 10827번 a^b 문제풀이 python

노가다 김씨 2022. 4. 3. 23:20

https://www.acmicpc.net/problem/10827

 

10827번: a^b

첫째 줄에 a와 b가 주어진다. (0 < a < 100, 1 ≤ b ≤ 100) a는 최대 소수점 9자리이며, 소수가 0으로 끝나는 경우는 없다. a는 항상 소수점이 포함되어 있다.

www.acmicpc.net

 

문제해석

 

실수형으로 a^b를 할 경우 오차가 생기기 마련인데 그것을 정확하게 출력하는게 문제이다.

 

이 문제를 나는 정수로 보고 풀었다.

 

예를들어 

3.141592 3 가 입력으로 주어 졌을경우

3141592^3를 구한다.

3141592^3=31006257328285746688

소수점을 삽입해야하는 곳을 찾는다.

여기서 소수점의 위치는 31뒤에 찍어야하므로 답은 31.006257328285746688이 된다.

 

소수를 정수로 보고 계산을 하므로 큰수의 연산이 필요한데 이건 파이썬으로 푸는것이 더 편할것 같아서 파이썬을 사용했다.

 

코드

 

l=input()
l=l.split()
n=len(l[0])-1-l[0].find('.')
x=l[0].split('.')
x=int(x[0]+x[1])
y=int(l[1])
z=bin(y)[2:]
sum=x
for i in range(1,len(z)):
    sum=sum*sum
    if z[i]=='1':
        sum=sum*x

sum=str(sum)
while len(sum)<n*y+1:
    sum='0'+sum
front=sum[:len(sum)-n*y]
back=sum[len(sum)-n*y:]
print(front+'.'+back)