C++程序 找到二次方程的根
给定形式为 ax 2 + bx + c ** 的二次方程,找到它的 **根 。
Examples :
输入 : a = 1, b = -2, c = 1
输出 : 根是实数且相同
1
输入 : a = 1, b = 7, c = 12
输出 : 根是实数且不同
-3, -4
输入 : a = 1, b = 1, c = 1
输出 : 根是复数
-0.5 + i1.73205
-0.5 – i1.73205
以下是几个重要的情况。
如果 b*b < 4*a*c
,则根是复数
(不是实数)。
例如,x2 + x + 1的根是
-0.5 + i0.86603和-0.5 – i0.86603
如果 b*b == 4*a*c
,则根是实数
并且两个根是相同的。
例如,x2 – 2x + 1的根是1和1
如果 b*b > 4*a*c
,则根是实数
并且不同。
例如,x2 – 7x – 12的根是3和4
以下是上述公式的实现。
// C++ program to find roots of
// a quadratic equation
#include <bits/stdc++.h>
using namespace std;
// Prints roots of quadratic equation
// ax*2 + bx + x
void findRoots(int a, int b, int c)
{
// If a is 0, then equation is
// not quadratic, but linear
if (a == 0)
{
cout << "Invalid";
return;
}
int d = b * b - 4 * a * c;
double sqrt_val = sqrt(abs(d));
if (d > 0)
{
cout << "Roots are real and different ";
cout << (double)(-b + sqrt_val) / (2 * a) <<
"" << (double)(-b - sqrt_val) / (2 * a);
}
else if (d == 0)
{
cout << "Roots are real and same ";
cout << -(double)b / (2 * a);
}
else // d < 0
{
cout << "Roots are complex ";
cout << -(double)b / (2 * a) <<
" + i" << sqrt_val / (2 * a) <<
"" << -(double)b / (2 * a) <<
" - i" << sqrt_val / (2 * a) ;
}
}
// Driver code
int main()
{
int a = 1, b = -7, c = 12;
// Function call
findRoots(a, b, c);
return 0;
}
输出
Roots are real and different
4.000000
3.000000
时间复杂度: O(log(D)),其中 D 是给定二次方程的鉴别式。
辅助空间: O(1)