利润统计函数c语言,C语言计算内部回报率(或名内部收益率)(IRR)
這是ECNU OJ 上的一個題目,是某次的課后作業(yè),我把它搬運上來與大家分享一下。
在 Excel 中有一個函數(shù) IRR 用于計算一個投資項目的內(nèi)部回報率(Internal return rate)。
在項目產(chǎn)生利潤之前需要先投入建設(shè)資金(假設(shè)稱為 c0),建成后每年產(chǎn)生的利潤(假設(shè)稱為 c1,c2…)。內(nèi)部回報率(記為 r,范圍為 ?100%∽+100%)是到項目末期的現(xiàn)金流為 0 的貼現(xiàn)率。
例如:某項目建設(shè)資金為 10000,項目生產(chǎn)持續(xù)期為 3 年,每年利潤為 3000,4000,5000,那么 r 滿足:
?10000(1+r)^3+3000(1+r)^2+4000(1+r)+5000=0
Excel 計算結(jié)果 r 大約為 8.8963%。
本題的測試數(shù)據(jù)保證 r 只有唯一解。
Input
第 1 行:整數(shù) T (1≤T≤10) 為問題數(shù)。
第 2∽3 行:第一個問題的數(shù)據(jù)。一行整數(shù) n (1≤n≤100) 表示項目生產(chǎn)年數(shù)。后面 1 行包含 n+1 個由一個空格分隔的整數(shù),表示投入的建設(shè)資金 c0 和 n 年中每年的利潤 ci。c0>0,0≤ci≤1000000000。
第 4∽2T+1 行:后面問題的數(shù)據(jù),格式與第一個問題相同。
Output
對于每個問題,輸出一行問題的編號(0 開始編號,格式:case #0: 等),然后在每一行中輸出計算出的 r(保留小數(shù)后 4 位)。
#include
#include
int main()
{
int n,i,m,j,j2;
double A,B,r,X,Y,C,x1;
long long huge=1000000000;
int a[102];
scanf("%d",&n);//n turn to T
for(i=1;i<=n;i++)
{
A=-1.0;B=1.0;//設(shè)定r的范圍
scanf("%d",&m);
m=m+1;
printf("case #%d:\n",i-1);
for(j=1;j<=m;j++)
{
scanf("%d",&a[j]);
}
while((B-A)*huge>1.0)
{
r=(A+B)/2.0;
x1=A+1;
X=-1*a[1];
for(j2=2;j2<=m;j2++)
{
X*=x1;
X+=a[j2];
}
x1=B+1;
Y=-1*a[1];
for(j2=2;j2<=m;j2++)
{
Y*=x1;
Y+=a[j2];
}
x1=r+1;
C=-1*a[1];
for(j2=2;j2<=m;j2++)
{
C*=x1;
C+=a[j2];
}
if(X*C>0) A=r;
else B=r;
}
if((r-0)*huge<1&&(r-0)*huge>-1)
printf("0.0000%%\n");
else
printf("%.4lf%%\n",r*100);
}
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的利润统计函数c语言,C语言计算内部回报率(或名内部收益率)(IRR)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelliJ IDEA 2016.2
- 下一篇: 网络电话VOIP技术解析