OJ演算法實驗題 內部收益率
阿新 • • 發佈:2018-12-14
思路:使用二分法求方程的近似解。
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int main(){ double IRR,NPV,l,r; int T; while(cin>>T&&T!=0){ double *p=new double[T+1]; for(int i=0;i<T+1;i++){ cin>>p[i];//輸入係數 } NPV=0.0;l=1E6;r=-1+1e-6; for(int i=0;i<1000;i++){ IRR=(l+r)/2.0; NPV=0.0; for(int j=0;j<T+1;j++){ NPV+=1.0*p[j]/pow((1+IRR),j); } if(fabs(NPV)<1e-9) break;//達成要求 if(NPV>0) r=IRR; else l=IRR; } cout<<std::fixed<<setprecision(2)<<IRR<<endl; } return 0; }
一開始只有例題答案正確,提交上去總是錯誤百分之50,後來查詢資料對比別人的程式碼,發現自己的上界設的太小,改成1e6後答案正確。對自己來說也是學到了,還要彌補的東西太多了。