内部收益率

来源:互联网 发布:消毒软件 编辑:程序博客网 时间:2024/04/29 05:27
原文地址:内部收益率作者:水自流

内部收益率

时间限制(普通/Java):1000MS/3000MS        运行内存限制:65536KByte
总提交:77          测试通过:57

描述

 

在金融中,我们有时会用内部收益率IRR来评价项目的投资财务效益,它等于使得投资净现值NPV等于0的贴现率。换句话说,给定项目的期数T、初始现金流CF0和项目各期的现金流CF1,CF2,...,CFTIRR是下面方程的解:

 

为了简单起见,本题假定:除了项目启动时有一笔投入(即初始现金流CF0<0)之外,其余各期均能赚钱(即对于所有i=1,2,...,TCFi> 0)。根据定义,IRR可以是负数,但不能大于-1。

输入

 

输入文件最多包含25组测试数据,每个数据占两行,第一行包含一个正整数T(1<=T<=10),表示项目的期数。第二行包含T+1个整数:CF0,CF1, CF2, ...,CFT,其中CF0 < 0, 0< CFi< 10000(i=1,2,...,T)。T=0表示输入结束,你的程序不应当处理这一行。

输出

对于每组数据,输出仅一行,即项目的IRR,四舍五入保留小数点后两位。如果IRR不存在,输出"No",如果有多个不同IRR满足条件,输出"Toomany"(均不含引号)

样例输入

 

1
-1 2
2
-8 9
0

样例输出

 

1.00
0.50

 

code:

#include<iostream>
#include<iomanip>
using
 namespace std;

int
 main()
{
int n,a[12],i,j;
  double t,b,m,c,s;
  while(cin>>n,n)
  {for(i=0;i<=n;i++)
    cin>>a[i];
    t=-1.0;b=1e6;
    for(i=0;i<100;i++)
    {m=t+(b-t)/2;
      c=1.0;s=0;
      for(j=1;j<=n;j++)
      { c=c/(1+m);
        s=s+c*a[j];
      }
      if(s<-a[0])
      b=m;
      else t=m;
    }
 cout<<setiosflags(ios::fixed)<<setprecision(2)<<m<<endl;
  }
  return 0
;
}

0 0
原创粉丝点击