10分记录,样例能过,是有什么未考虑到的吗?
ans函数用于将两个数化简。
#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c,n,p,q,z,g;
double d;
bool sb(){
d=sqrt(n);
if(floor(d)==ceil(d)){
z=int(d);
return true;
}
else return false;
}
void ans(){
q=2*a;
g=__gcd(abs(p),abs(q));
p/=g;
q/=g;
if(q<0){
p=-p;
q=-q;
}
return;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t>>m;
for(int i=1;i<=t;i++){
cin>>a>>b>>c;
n=b*b-4*a*c;
if(n<0){
cout<<"NO";
}
else{
if(sb()){
sb();
p=max(-b+z,-b-z);
ans();
cout<<p;
if(q!=1){
cout<<"/"<<q;
}
}
else{
p=-b;
if(p!=0){
ans();
cout<<p;
if(q!=1){
cout<<"/"<<q;
}
cout<<"+";
}
q=2*a;
p=1;
for(int i=sqrt(n);i>=2;i--){
if(n%(i*i)==0){
p=i;
break;
}
}
n=n/(p*p);
ans();
if(p!=1)cout<<p<<"*";
cout<<"sqrt("<<n<<")";
if(q!=1)cout<<"/"<<q;
}
}
cout<<"\n";
}
return 0;
}