题解 100% AC
2025-08-08 16:47:27
发布于:江苏
18阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int T,m,a,b,c,numerator,denominator,k,t;
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
void cancelling(){
bool flag=numerator<0?1:0;
if(flag)numerator=-numerator;
int g=gcd(numerator,denominator);
numerator/=g,denominator/=g;
if(flag)numerator=-numerator;
}
void resolve(int n){
for(int i=sqrt(n);i>=1;i--){
int w=n/i/i;
if(w*i*i==n){k=i,t=w;return;}
}
}
int main(){
freopen("uqe.in","r",stdin);
freopen("uqe.out","w",stdout);
cin>>T>>m;
while(T--){
cin>>a>>b>>c;
int delta=b*b-4*a*c;
if(delta<0){cout<<"NO"<<endl;continue;}
if(a<0)a=-a,b=-b,c=-c;
int sq=sqrt(delta);
if(sq*sq==delta){
numerator=-b+sq,denominator=2*a;
cancelling();
if(denominator==1)cout<<numerator<<endl;
else cout<<numerator<<"/"<<denominator<<endl;
}else{
numerator=-b,denominator=2*a;
cancelling();
if(b!=0){
if(denominator==1)cout<<numerator;
else cout<<numerator<<"/"<<denominator;
cout<<"+";
}
resolve(delta);
numerator=k,denominator=2*a;
cancelling();
if(numerator==1&&denominator==1)cout<<"sqrt("<<t<<")"<<endl;
else if(denominator==1)cout<<numerator<<"*sqrt("<<t<<")"<<endl;
else if(numerator==1)cout<<"sqrt("<<t<<")/"<<denominator<<endl;
else cout<<numerator<<"*sqrt("<<t<<")/"<<denominator<<endl;
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
这里空空如也
有帮助,赞一个