问题 E: 解方程
时间限制: 1 Sec 内存限制: 128 MB
提交: 163 解决: 43
[提交][状态][讨论版][命题人: cbc]
题目描述
求方程f(x)=2^x+3^x-4^x=0在[1,2]内的根。
输入
输入m(0<=m<=8),控制输出精度
输出
输出方程f(x)=0的根,x的值精确小数点m位
样例输入
3
样例输出
1.507
提示
提示:2^x可以表示成exp(x*ln(2))的形式。
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps=1e-10;//一开始精度为1e-8,错误12%,改完后终于正确了0v0
double f(double x)
{
double y;
y=exp(x*log(2))+exp(x*log(3))-exp(x*log(4));
return y;
}
int main()
{
double x,e=1,x1,x2;int m,mod=1;
cin>>m;
for(int i=1;i<=m;i++)
{mod*=10;}
x1=1,x2=2;
if(f(x1)==0) x1=x1;
else if(f(x1)*f(x2)<0)
{
while(x2-x1>=eps)
{
double xx=x1+(x2-x1)/2;
if(f(x1)*f(xx)<=0)
x2=xx;
else
x1=xx;
}
}
int z;
x1=x1*mod*10;
z=floor(x1);
if(m==0)
{
int z1;
z1=floor(x1);
z1=(z1+5)/10;
cout<<z1;
return 0;
}
cout<<z/(mod*10);
if(m!=0)
cout<<"."<<(z%(mod*10)+5)/10;
return 0;
}