利润统计函数c语言,C语言计算内部回报率(或名内部收益率)(IRR)
這是ECNU OJ 上的一個題目,是某次的課后作業,我把它搬運上來與大家分享一下。
在 Excel 中有一個函數 IRR 用于計算一個投資項目的內部回報率(Internal return rate)。
在項目產生利潤之前需要先投入建設資金(假設稱為 c0),建成后每年產生的利潤(假設稱為 c1,c2…)。內部回報率(記為 r,范圍為 ?100%∽+100%)是到項目末期的現金流為 0 的貼現率。
例如:某項目建設資金為 10000,項目生產持續期為 3 年,每年利潤為 3000,4000,5000,那么 r 滿足:
?10000(1+r)^3+3000(1+r)^2+4000(1+r)+5000=0
Excel 計算結果 r 大約為 8.8963%。
本題的測試數據保證 r 只有唯一解。
Input
第 1 行:整數 T (1≤T≤10) 為問題數。
第 2∽3 行:第一個問題的數據。一行整數 n (1≤n≤100) 表示項目生產年數。后面 1 行包含 n+1 個由一個空格分隔的整數,表示投入的建設資金 c0 和 n 年中每年的利潤 ci。c0>0,0≤ci≤1000000000。
第 4∽2T+1 行:后面問題的數據,格式與第一個問題相同。
Output
對于每個問題,輸出一行問題的編號(0 開始編號,格式:case #0: 等),然后在每一行中輸出計算出的 r(保留小數后 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;//設定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;
}
總結
以上是生活随笔為你收集整理的利润统计函数c语言,C语言计算内部回报率(或名内部收益率)(IRR)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelliJ IDEA 2016.2
- 下一篇: 网络电话VOIP技术解析