内部收益率

原文地址:内部收益率 作者:水自流

内部收益率

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

描述

 

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

 

为了简单起见,本题假定:除了项目启动时有一笔投入(即初始现金流 CF 0 < 0)之外,其余各期均能赚钱(即对于所有 i=1,2,..., TCF i > 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满足条件,输出"Too many"(均不含引号)

样例输入

 

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
;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值