求一元二次方程的根

来源:互联网 发布:excel 解析.xlsx java 编辑:程序博客网 时间:2024/05/01 06:50

题目来源:

本题目要求一元二次方程 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*cdouble intermediateResult =0;//系数a b cdouble a ,b,c;a = scanner.nextDouble();b = scanner.nextDouble();c = scanner.nextDouble();//保留两位小数DecimalFormat df = new DecimalFormat("#0.00");//如果系数都为0if(a==0 && b==0 && c==0){System.out.println("Zero Equation");return ;}//如果a和b为0,c不为0if(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*cintermediateResult = 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

0 0
原创粉丝点击