题目链接:http://noi.openjudge.cn/ch0104/20/
题目内容(建议点开链接):
20:求一元二次方程的根
查看
提交
统计
提问
总时间限制:
1000ms
内存限制:
65536kB
描述
利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。
输入
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。
输出
输出一行,表示方程的解。
若两个实根相等,则输出形式为:x1=x2=...。
若两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,其中x1,x2满足以下两个条件中的一个:
1. x1的实部大于x2的实部
2. x1的实部等于x2的实部且x1的虚部大于等于x2的虚部
所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。
样例输入
1.0 2.0 8.0
样例输出
x1=-1.00000+2.64575i;x2=-1.00000-2.64575i
我的代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
double a,b,c;
cin>>a>>b>>c;
double delta=b*b-4*a*c;
if(delta>=0) {
double x1=(-1*b+sqrt(delta))/(2*a);
double x2=(-1*b-sqrt(delta))/(2*a);
if(x1==x2) printf("x1=x2=%.5lf\n",x1);
else {
printf("x1=%.5lf;x2=%.5lf\n",x1,x2);
}
} else {
double shibu=-1*b/(2*a);
double xubu=sqrt(-1*delta)/(2*a);
printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n",shibu,xubu,shibu,xubu);
}
return 0;
}
求高手看看哪里做错了!悬赏的!
你有什么问题?
追问就总是显示答案错误。我也找不出来
追答若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,其中x1,x2满足以下两个条件中的一个:
1. x1的实部大于x2的实部
2. x1的实部等于x2的实部且x1的虚部大于等于x2的虚部
这个你没比较吧
我是没比较,谢谢你帮助我找出问题
那我现在告诉你,我的Windows10不支持debug了
追答你不会用虚拟机?
还有你用什么编程工具?没有DEBUG?还是说你没有仔细查找如何DEBUG?
就算没有,退一万步说,你可以利用打印函数,将每一步的结果打印出来,其实也相当于debug。。。
已经找到了问题。虚拟机可以用,也会用。令外最近打算换软件,应该可以。