-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathquadratic.cpp
More file actions
39 lines (37 loc) · 1.14 KB
/
quadratic.cpp
File metadata and controls
39 lines (37 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <cmath>
void SolveQuadratic(int a, int b, int c) {
auto print = [](double x) {
if (std::abs(x) < 1e-9) x = 0;
if (std::abs(x - std::round(x)) < 1e-9) {
std::cout << static_cast<long long>(std::round(x));
} else {
x = std::round(x * 1e6) / 1e6; //округление (тест)
std::cout << x;}
};
if (a == 0) {
if (b == 0) {
if (c == 0) std::cout << "infinite solutions";
else std::cout << "no solutions";
} else {
double x = -static_cast<double>(c) / b;
print(x);}
return;}
double D = static_cast<double>(b) * b - 4.0 * a * c;
if (D < 0) {
std::cout << "no solutions";
} else if (D == 0) {
double x = -static_cast<double>(b) / (2.0 * a);
print(x);
} else {
double sqrtD = std::sqrt(D);
double x1 = (-b - sqrtD) / (2.0 * a);
double x2 = (-b + sqrtD) / (2.0 * a);
if (x1 > x2) {
double temp = x1;
x1 = x2;
x2 = temp;}
print(x1);
std::cout << " ";
print(x2);}
}