빚이 B, 이자가 R%, 매달 갚는 돈이 M일 때 1200달까지 갚는게 가능하다면 몇달째에 갚는지, 불가능하다면 impossible을 출력하는 문제.
계산 및 센트단위로 반올림하는 과정에서 소수점 오차를 잘 컨트롤 하면 된다.
또한 double로 계산하므로 M원씩 갚아 나가지만 이자가 더 큰 경우, 전 달의 남은 빚이 현재남은 빚보다 작으면
즉 매달 남은 빚이 늘어나는 경우에는 double값을 넘어갈 수 있기 때문에 미리 조건문을 통해 걸러내야 한다(여기서 한번 틀렸다).
<코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include<stdio.h> typedef double db; int t; db r, b, m, pb; int main() { scanf("%d", &t); while (t--) { scanf("%lf%lf%lf", &r, &b, &m); r = (r + 100.0) / 100.0; int i = 0; bool f = 0; pb = b; for (; i < 1200 && !f; i++) { b = ((int)((b*r * 100) + 0.5 + 1e-8) / 100.0) - m; if (b <= 0) break; if (b > pb) f = 1; } printf(((f || i == 1200)? "impossible\n" : "%d\n"), i + 1); } return 0; } | cs |
'BOJ' 카테고리의 다른 글
2316 도시 왕복하기 (0) | 2017.08.30 |
---|---|
14671 영정이의 청소 (0) | 2017.08.30 |
1765 닭싸움 팀 정하기 (0) | 2017.08.30 |
4/5 boj (0) | 2017.04.05 |
3/24 boj (0) | 2017.03.24 |