빚이 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** 100+ 0.5 + 1e-8/ 100.0- m;
            if (b <= 0break;
            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

+ Recent posts