[洛谷1163]银行贷款

 

当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。

输入

输入文件仅一行包含三个用空格隔开的正整数。

第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。

输出

输出文件应该是一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到0.1%。

样例

LOAN.IN

1000 100 12

LOAN.OUT

2.9

思路

  二分答案。因为是利滚利的缘故,不能直接套用公式,可解。

var m,y,mouth,jg,i,minn:longint;
    s:string;
    min,ans:real;

function js(mid:longint):real;  
var mid1,n:real;  
    i:longint;  
begin  
    n:=m;  
    mid1:=mid/10000;  
    for i:=1 to mouth do
    n:=n*(1+mid1)-y;  
    exit(n);  
end;  
  
function ef(l,r:longint):longint;  
var mid:longint;
    zhi:real;  
begin  
    while l<r do  
    begin  
        mid:=(l+r) div 2;  
        zhi:=js(mid);  
        if (abs(zhi)<min) or (minn=-1) then
        begin  
            min:=abs(zhi);  
            minn:=mid;  
        end;  
        if zhi>0 then r:=mid;  
        if zhi<0 then l:=mid+1;
        if zhi=0 then exit(mid);
    end;
    exit(l);
end;

begin
    minn:=-1;
    read(m,y,mouth);  
    jg:=ef(0,trunc((y/m)*10000));
    ans:=jg/100;  
    writeln(ans:0:1);
end.
View Code
原文地址:https://www.cnblogs.com/yangqingli/p/4909594.html