比赛 |
普及组水题赛(语言题赛) |
评测结果 |
ATATA |
题目名称 |
一元三次方程求解 |
最终得分 |
60 |
用户昵称 |
devil |
运行时间 |
2.001 s |
代码语言 |
C++ |
内存使用 |
0.32 MiB |
提交时间 |
2014-10-14 19:28:30 |
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
double a,b,c,d;
double ABS(double x)
{
if(x<0) return -x;
return x;
}
double f(int x)
{
return (double)(a*x*x*x+b*x*x+c*x+d);
}
double found(int left,int right)
{
if(f(left)==0) return left;
double mid=(left+right)/2.0;
if(ABS(f(mid)-(int)f(mid))<=0.001) return mid;
if(f(left)*f(mid)<0) found(left,mid);
else found(mid,right);
}
int main()
{
freopen("3cfc.in","r",stdin);
freopen("3cfc.out","w",stdout);
int ans=0;
cin>>a>>b>>c>>d;
for(int i=-100,j=-99;i<=100&&j<=100&&ans<=3;i++,j++)
{
if(f(i)*f(j)<0||f(i)==0)
{
ans++;
printf("%.2lf ",found(i,j));
}
}
if(ans<3&&f(100)==0) printf("100.00\n");
else printf("\n");
return 0;
}