https://www.acmicpc.net/problem/1312
1312번: 소수
피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.
www.acmicpc.net
문제
피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.
입력
첫 번째 줄에 A와 B(1 ≤ A, B ≤ 100,000), N(1 ≤ N ≤ 1,000,000)이 공백을 경계로 주어진다. 다.
출력
A÷B를 했을 때, 소숫점 아래 N번째 수를 출력한다.
내 풀이
# 31120kb 200ms
a,b,n = map(int, input().split())
for i in range(n):
a %= b
a *= 10
print(int(a//b))
메모
중간에 틀린 코드 메모.
문제에서 N의 범위가 1 ≤ N ≤ 1,000,000 이므로 소수 1백만 번째 자리수도 계산해줘야 한다.
# 그냥 나누면 런타임에러(IndexError)
a, b, n = map(int, input().split())
cal = str(a / b)
cal1 = cal.split('.')[1]
print(int(cal1[n-1]))
# 제곱해서 나누면 런타임에러(OverflowError)
a, b, n = map(int, input().split())
cal = str(int(((a * (10**n)) / b)))
print(cal[-1])
하지만,
단순 나누면 소수점 16자리까지밖에 출력이 안되므로 IndexError가 뜨고.
그 수만큼 제곱하여 1의 자리까지 끌어올려도 10의 1백만 제곱이 되므로 OverflowError가 뜬다.
이 때문에 결국 위의 내 풀이처럼 10단위로 곱해서 반복 처리해야지만 결과를 얻을 수 있다.
'파이썬 알고리즘 연습' 카테고리의 다른 글
[Python | 백준 1343번] 폴리오미노 (1) | 2024.02.20 |
---|---|
[Python | 백준 1340번] 연도 진행바 (0) | 2024.02.20 |
[Python | 백준 1316번] 그룹 단어 체커 (0) | 2024.02.14 |
[Python | 백준 1308번] D-Day (0) | 2024.02.14 |
[Python | 백준 1813번] 논리학 교수 (2) | 2024.02.14 |