- 2分探索
- コメントで消しているのは、n買い目の支払い後の残高を明示的に書いた公式。これだと、テストケース0で駄目だった。
#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
#include <utility>
#include <set>
#include <cctype>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iterator>
using namespace std;
class AutoLoan{
public:
double func(int n, double price, double r, double c){
double ret = price;
for(int i = 0; i < n; i++){
ret = ret * (1 + r / 12) - c;
}
return ret;
}
double interestRate(double price, double monthlyPayment, int loanTerm){
double ret1 = 0, ret2 = 100;
double ret3;
int cnt = 0;
while((abs(ret1 - ret2) > 1e-9) || (((ret2 - ret1) / ret1) > 1e-9)){
ret3 = (ret1 + ret2) / 2;
double val = func(loanTerm, price, ret3 / 100, monthlyPayment);
if(val < 0){
ret1 = ret3;
}
else if(val > 0){
ret2 = ret3;
}
else{
return ret3;
}
cnt++;
}
return (ret1 + ret2) / 2;
}
};