求一元二次方程的根
2015-02-05 13:57
169 查看
题目来源:
本题目要求一元二次方程 a*x2+b*x+c=0 的根,结果保留2位小数。
输入格式:
输入在一行中给出3个浮点系数a, b, c,中间用空格分开。
输出格式:
根据系数情况,输出不同结果:
输入样例 1:
输出样例 1:
输入样例 2:
输出样例 2:
输入样例 3:
输出样例 3:
输入样例 4:
输出样例 4:
输入样例 5:
输出样例 5:
代码:
参考: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
本题目要求一元二次方程 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
相关文章推荐
- 分支-18. 求一元二次方程的根(20)
- Openjudge-计算概论(A)-求一元二次方程的根
- 求一元二次方程求根公式与韦达定理.
- 分支-18 求一元二次方程的根(20)
- 求一元二次方程的根
- 用类方法求解一元二次实系数方程
- 1028: 例题3-5 求一元二次方程的根
- 求一元二次方程的根
- 百练_2707 求一元二次方程的根
- 我的第十六个C++上机报告(求一元二次方程的根)
- C语言程序 求一元二次方程的解
- 第九周 求一元二次方程的解
- 例题(8.3) 求一元二次方程的根 (1051)
- 求一元二次方程
- 算法:求一元二次方程ax^2 + bx + c = 0的根
- if语句(判断结婚条件和一元二次方程)
- 8.求一元二次方程的根(未经评测)
- 什么是一元一次方程和一元二次方程
- 通过java实现输入系数求一元二次方程根,学习Scanner()、split()和Substring()函数
- c语言:求一元二次方程的跟,系数a,b,c由键盘输入(要求考虑所有情况)