写这段代码的时候遇到一个问题,在下面注释着,就是迭代的过程中,我写成了下面的样子,一直返回nan,后来才发现,每次迭代都返回给上一层,因此这一层,但是上一层却没有返回,因此就w了
double getRes(double left ,double right ,double target )
{
if(getTemp(left)>target||getTemp(right)<target )
{
return -1;
}
double res, mid = (left+right)/2;
if(fabs(getTemp(mid)-target)<1e-5)
{
return mid ;
}
else if(getTemp(mid)<target)
{
res =getRes(mid,right,target );
}else if(getTemp(mid)>target)
{
res =getRes(left,mid,target );
}
}
#include <iostream>
#include <iomanip>
#include<queue>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
#include<string.h>
#include<sstream>
#include<string>
#include<queue>
#define MAX 5842
//¶¨Ò庯Êý¶Î
#define repf(i,a,b) for(int i =(a);i<(b);i++)
#define repfe(i,a,b) for(int i =(a);i<=(b);i++)
using namespace std;
double getTemp(double a)
{
return 8*pow(a,4)+7*pow(a,3)+2*pow(a,2)+3*a +6 ;
}
double getRes(double left ,double right ,double target )
{
if(getTemp(left)>target||getTemp(right)<target )
{
return -1;
}
double res, mid = (left+right)/2;
if(fabs(getTemp(mid)-target)<1e-5)
{
return mid ;
}
else if(getTemp(mid)<target)
{
res =getRes(mid,right,target );
}else if(getTemp(mid)>target)
{
res =getRes(left,mid,target );
}
return res ;
}
int main() {
int num ;
double target ,res;
cin >> num ;
while(num--){
cin >> target ;
res =getRes(0.0,100.0,target);
if(res == -1 )
{
printf("No solution!\n");
}else {
printf("%.4lf\n",res);
}
}
return 0 ;
}