您的位置:首页 > 其它

求一元二次方程的根

2015-02-05 13:57 169 查看
题目来源:

本题目要求一元二次方程 a*x2+b*x+c=0 的根,结果保留2位小数。

输入格式:

输入在一行中给出3个浮点系数a, b, c,中间用空格分开。

输出格式:

根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。


输入样例 1:
2.1 8.9 3.5


输出样例 1:
-0.44
-3.80


输入样例 2:
1 2 3


输出样例 2:
-1.00+1.41i
-1.00-1.41i


输入样例 3:
0 2 4


输出样例 3:
-2.00


输入样例 4:
0 0 0


输出样例 4:
Zero Equation


输入样例 5:
0 0 1


输出样例 5:
Not An Equation

代码:
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Scanner;

/*
* */
public class Main {

public static void main(String[] args) throws ParseException {

Scanner scanner = new Scanner(System.in);
//是否是复数根
boolean flag =false;
//中间结果,保留b*b - 4*a*c
double intermediateResult =0;
//系数a b c
double a ,b,c;
a = scanner.nextDouble();
b = scanner.nextDouble();
c = scanner.nextDouble();
//保留两位小数
DecimalFormat df = new DecimalFormat("#0.00");
//如果系数都为0
if(a==0 && b==0 && c==0)
{
System.out.println("Zero Equation");
return ;
}
//如果a和b为0,c不为0
if(a==0 && b==0 && c!=0)
{
System.out.println("Not An Equation");
return ;
}
//因为输出结果经常用到-b,-c,如果b,c=0,不转换成-0的话,会导致输出结果格式不正确
//此处最容易出错,虽然结果是正确的,但是输出的0.00不能是-0.00,
if(b==0) b=-0.0;
if(c==0) c=-0.0;
//一元一次方程
if(a==0)
{

System.out.println(df.format((-c)/b));

}
//一元二次方程
else
{
//求b*b - 4*a*c
intermediateResult = b*b - 4*a*c;
//有实数根
if(intermediateResult >=0)
{
//只有一个实数根
if(intermediateResult==0)
{

System.out.println( df.format((-b)/(2*a)) );

}
//两个实数根
else
{	intermediateResult=Math.sqrt(intermediateResult);
//先输出大的根,再输出小的根
if(a>0)
{
System.out.println(df.format(( (-b)+intermediateResult )/(2*a)));
System.out.println( df.format(( (-b)-intermediateResult )/(2*a)));
}
else
{
System.out.println( df.format(( (-b)-intermediateResult )/(2*a)));
System.out.println(df.format(( (-b)+intermediateResult )/(2*a)));
}
}

}
//有复数根
else
{
flag =true;
//将b*b - 4*a*c转为正数,并开根号
intermediateResult=Math.sqrt(Math.abs(intermediateResult));
System.out.println( ( df.format((-b)/(2*a)))+"+"+df.format(intermediateResult/(2*a))+"i");
System.out.println( ( df.format((-b)/(2*a)))+"-"+df.format(intermediateResult/(2*a))+"i");
}
}

}

}


参考:http://zhidao.baidu.com/question/560822757.html?qbl=relate_question_0&word=%C7%F3%D2%BB%D4%AA%B6%FE%B4%CE%B7%BD%B3%CC%B5%C4%B8%F9%20%B8%B4%CA%FD%B8%F9&optimi=4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: