代码:
#include<bits/stdc++.h>
using namespace std;
int _gcd(int a,int b){//最大公因数
return b?_gcd(b,a%b):a;
}
int genhaoqian,genhaohou;
int _find(int num){
int l=1,r=1000,ans=1;
while(l<=r){
int mid=(l+r)/2;
if(mid*mid<=num){
ans=mid;
l=mid+1;
}else{
r=mid-1;
}
}
return ans;
}
void genhao(const int shanjiao){
genhaoqian=_find(shanjiao);
genhaohou=shanjiao-genhaoqian*genhaoqian;
}
bool qianfenshu(int a,int b){
a*=2;
if(b==0||a==0){
return 0;
}
if(a<0){
a=-a;
b=-b;
}
int gcd=_gcd(a,b);
if(gcd!=0){
a/=gcd;
b/=gcd;
}if(a==1){
cout<<-b;
}else{
cout<<-b<<"/"<<a;
}
return 1;
}
void houfenshu(bool qianfenshu_f,int a,int b,int c,const int shanjiao){
genhao(shanjiao);
if(genhaoqian==0){
if(genhaohou==0){
cout<<endl;
return;
}
cout<<"+sqrt("<<genhaohou<<")";
if(2*a==1){
cout<<endl;
return;
}
cout<<"/"<<2*a<<endl;
return;
}
if(2*a<0){
a=-a;
genhaoqian=-genhaoqian;
}
int gcd=_gcd(abs(genhaoqian),abs(2*a));
genhaoqian/=gcd;
int ta=(a*2)/gcd;
if(ta==1){
cout<<genhaoqian/ta<<endl;
return;
}
if(genhaohou==0){
cout<<genhaoqian<<"/"<<ta<<endl;
}
else{
cout<<genhaoqian<<"*sqrt("<<genhaohou<<")/"<<ta<<endl;
}
}
void teshuchuli(int shanjiao,int a,int b,int fenzier){
a*=2;
if(b==0||a==0){
cout<<"NO"<<endl;
return;
}
if(a<0){
a=-a;
b=-b;
}
int tb=-b+fenzier;
cout<<tb<<"/"<<a<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int a,b,c,t,m;
cin>>t>>m;
while(t--){
cin>>a>>b>>c;
int shanjiao=b*b-4*a*c,t=_find(shanjiao);
if(shanjiao<0){
cout<<"NO"<<endl;
continue;
}
if(t*t==shanjiao){
teshuchuli(shanjiao,a,b,t);
continue;
}
bool qianfenshu_f=qianfenshu(a,b);
if(shanjiao==0){
cout<<endl;
continue;
}
houfenshu(qianfenshu_f,a,b,c,shanjiao);
}
return 0;
}
求大佬解决,解决给关注,谢谢。