zoukankan      html  css  js  c++  java
  • 2545: 内部收益率

    2545: 内部收益率

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 25  Solved: 8
    [Submit][Status][Web Board]

    Description

    在金融中,我们有时会用内部收益率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满足条件,输出"Too many"(均不含引号)

    Input

     

    Output

     

    Sample Input

    1
    -1 2
    2
    -8 6 9
    0
    

    Sample Output

    1.00
    0.50

    #include<stdio.h>
    #include<math.h>
    double cf[30];
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            if(n==0)
                break;
            int i,j;
            double s,f,x,l,r,m;
    
            for(i=0;i<=n;i++)
                scanf("%lf",&cf[i]);
            cf[0]=cf[0]*(-1.0);
            l=-1.0;
            r=1e6;
            while(fabs(cf[0]-s)>1e-7)
            {
                s=0;
                f=1.0;
                m=l+(r-l)/2;
                for(j=1;j<=n;j++)
                {
                    f=f/(1+m);
                    s=s+cf[j]*f;
                }
                if(s>cf[0])
                    l=m;
                else
                    r=m;
            }
            printf("%.2lf
    ",m);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Hibernate4
    Hibernate3 多对多关系
    Hibernate 二(一级缓存,多表设计之一对多)
    Hibernate 配置文件
    Hibernate 基础解析(Configuration,SessionFactory,Session,Transaction,Query,Criteria)
    struts2 防止表单的重复提交
    struts2 UI标签 和 主题
    struts2 OGNL配和通用标签和其它标签的使用
    struts2 对EL的改变
    struts2 contextMap
  • 原文地址:https://www.cnblogs.com/mjn1/p/9176146.html
Copyright © 2011-2022 走看看