求方程的根(c语言)(https://wzoi.cc/s/1/1131)
题目描述:
输入m,n,p,a,b,求方程f(x)=mx+nx-px=0在[a,b]内的根。m,n,p,a,b均为整数,且a<b;m,n,p都大于等于1。如果有根,则输出,精确到1E-11;第二行输出此时f(x)的值,如果无方程根,则输出“NO”。
样例输入:
2 3 4 1 2
样例输出:
1.5071265916376433E+0000
3.511049957716228E-012
时间限制:1000ms
空间限制:256MByte
你的这个,只能给你思路及参考程序,不知你的考试用的什么编译器
一般C的输出没有E+0000这样的格式,而只有E+000
另外,因为各个编译器精度不同,不可能完全达到你的结果
以下是我参考网上写的程序
#include <stdio.h>
#include <math.h>
const double eps = 1e-11;
long a,b,m,n,p;
double lnn,lnm,lnp;
int flag=0;
void binary(double l, double r)
{
double x,rs;
if (r-l > 1e-12)
{
x = (l + r) / 2.0;
rs = exp(x*lnm)+exp(x*lnn)-exp(x*lnp);
if (rs < eps && rs > -eps)
{
flag = 1;
printf("%.16E
%.16E",x,rs);
return;
}
if (rs * (m+n-p) > eps)
binary(x,r);
else
binary(l,x);
}
}
int main()
{
scanf("%ld%ld%ld%ld%ld",&m,&n,&p,&a,&b);
lnm = log(m);
lnn = log(n);
lnp = log(p);
binary(a,b);
if (!flag)
printf("NO");
return 0;
}
下一篇:请问一下大家这个怎么弄?