题意:找出使得等式值为0的irr并输出
思路一:二分加线性求等式的值
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define eps 1e-8
using namespace std;
const int N=15;
double CF[N];
int main()
{
int t;
while(~scanf("%d",&t)&&t){
for(int i=0;i<=t;i++)scanf("%lf",&CF[i]);
double l=-1.0,r=1e5,mid;
while(r-l>eps){
mid=(r+l)/2.0;
double res=CF[t];
for(int i=t;i>0;i--){
res=res/(1.0+mid)+CF[i-1];
}
if(res<0)r=mid;
else l=mid;
}
printf("%.2lf\n",mid);
}
return 0;
}
思路二:二分加暴力模拟等式运算
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define eps 1e-9
using namespace std;
const int N=15;
double CF[N];
int main()
{
int t;
while(~scanf("%d",&t)&&t){
for(int i=0;i<=t;i++)scanf("%lf",&CF[i]);
double l=0,r=1e6;
while(r-l>=eps){
double mid=(r-l)/2+l;
double res=0,IRR=mid;
for(int i=0;i<=t;i++)res+=CF[i]/pow(IRR,i);
if(res<0)r=mid;
else l=mid;
}
printf("%.2lf\n",(r-l)/2+l-1);
}
return 0;
}