解题思路:
就老老实实照着上面写的公式算。试出来的。-1到正无穷。
注意事项:
double,最好不要用=号,用约等于就行。
参考代码:
#include<stdio.h>
#include<math.h>
int main()
{
double irr,npv,num,max,mix;
double temp[25];
int i,t,t0,j,k;
int cf[10];
for(i=0;i<25;i++)
{
scanf("%d",&t);
if(t==0)
{
temp[i]=-3;
break;
}
scanf("%d",&t0);
for(j=0;j<t;j++)
{
scanf("%d",&cf[j]);
}
irr=1e10;
max=irr;
mix=-1;
num=0;
k=0;
temp[i]=-2;
while(num<=1&&k<100&&temp[i]!=irr)
{
npv=0;
for(j=0;j<t;j++)
{
npv=npv+(1.0*cf[j])/pow(irr+1,j+1.);
}
npv=npv+t0;
if(fabs(npv)<1e-5)
{
num++;
temp[i]=irr;
irr=max*20;
mix=max;
max=irr;
k=0;
continue;
}
if(npv>0)
{
mix=irr;
if(irr==max)
{
irr=irr*2;
max=irr;
}
else
{
irr=(max+mix)/2;
}
}
else if(npv<0)
{
max=irr;
irr=(max+mix)/2;
}
k++;
}
if(k==100&&temp[i]==-2)
temp[i]=-2;
else if(num>1)
temp[i]=-4;
}
for(i=0;i<25;i++)
{
if(temp[i]==-3)
{
break;
}
if(temp[i]==-2)
{
printf("No");
}
else if(temp[i]==-4)
{
printf("Too many");
}
else
printf("%.2lf\n",temp[i]);
}
return 0;
}
0.0分
1 人评分
【亲和数】 (C语言代码)浏览:530 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:1000 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:1267 |
wu-淘淘的名单 (C++代码)浏览:1532 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:616 |
1014题解浏览:524 |
模拟计算器 (C++代码)浏览:885 |
C二级辅导-计负均正 (C语言代码)浏览:523 |
分糖果 (C语言代码)浏览:980 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:529 |