题解:大模拟
∆= b²-4ac.
1.∆<0,无解,输出"NO"
2.∆≥0 x1=(-b/2a)+(√∆/2a),x1=(-b/2a)-(√∆/2a)
当a<0时,最大解为x2
当a>0时,最大解为x1
……………………………………………………………………
【AC代码】
#include<bits/stdc++.h>
using namespace std;
int T,m,a,b,c,d,k,t;
int gcd(int a, int b)
{
if(a == 0) return b;
else gcd(b % a, a);
}
int main()
{
int T, m, a, b, c, d, k, t;
cin >> T >> m;
for(int i = 1; i <= T; i++)
{
cin >> a >> b >> c;
if(a < 0)
a =- a, b =- b, c =- c;
d = b * b - 4 * a * c, k = 1;
if(d < 0)
{
cout << "NO" << endl;
break;
}
for(int i = 2; i * i <= d; i++)
while(d % (i * i) == 0)
k *= i, d /= (i * i);
if(d==0||d==1)
{
t = abs(gcd(2 * a, -b + k * d));
cout << (-b + k * d) / t;
if(2 * a / t != 1)
cout << '/' << 2 * a / t;
cout << endl;
break;
}
t = abs(gcd(-b, 2 * a));
if(-b / t == 0)
goto g;
cout << -b / t;
if(2 * a / t != 1)
cout << '/' << 2 * a / t;
cout << '+';
g:
t = abs(gcd(k, 2 * a));
if(k / t != 1)
cout << k / t << '*';
cout << "sqrt(" << d << ')';
if(2 * a / t != 1)
cout << '/' << 2 * a / t;
cout << endl;
}
return 0;
}