3306: 求一元二次方程
内存限制:256 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:0
解决:0
题目描述
求一元二次方程ax2+bx+c=0的根,其中a不等于0。结果要求精确到小数点后5位。
输入
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程的系数。
输出
输出一行,表示方程的解。若两个实根相等,则输出形式为:“x1=x2=...“;若两个实根不等,在满足根小者在前的原则,则输出形式为:“x1=...;x2=...“;若无实根输出“No answer!”。
所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
样例输入 复制
-15.97 19.69 12.02
样例输出 复制
x1=-0.44781;x2=1.68075
提示
比较浮点数相等,由于精度问题,直接比较有时可能会出错,在比较的时候需要用一个很小的数值来进行比较,当二者之差小于这个很小的数时,就认为二者是相等的了,这个很小的数,称为精度。本题中(要求精确到小数点后5位)用到的精度为1e-6.也就是0.000001.所以对于两根浮点数x1,x2,如果要比较大小,如果fabs(x1-x2)<=1e-6,那么就是相等了。 fabs是求浮点数绝对值的函数。注意:(1):if(条件1) 语句1; if(条件2) 语句2; (2):if(条件1) 语句1; else if(条件2) 语句2; 双if语句,条件1和条件2都要判断后,按条件执行。而if,else if 当条件1满足后,else if后的语句就不会执行。