代码
#include<bits/stdc++.h>
#define T true
#define F false
using namespace std;
int a,b,c,d;
int ans_b1=1,ans_b2=1,ans_b3=1;
bool iss;
int main(){
int t,m;
cin>>t>>m;
// for(int i=2;i<=m+3;i++){
// if(h[i]!=1) p[++l]=i;
// for(int j=2;j<=l;j++){
// if(i*p[j]>m+1) break;
// h[i*p[j]]=1;
// if(i%p[j]==0) break;
// }
// }
while(t--){
cin>>a>>b>>c;
d=b*b-4*a*c;
if(d<0){
cout<<"NO\n";
continue;
}
else{
bool isZheng=T;
b=-b;
a=2*a;
if(a<0&&b<0) b=-b,a=-a;
if(a<0||b<0) isZheng=F,b=abs(b),a=abs(a);
if(d!=0){
int d_out=1,d_in=d;
for(int i=2;i<=d;i++){
while(d_in%(i*i)==0){
d_out*=i;
d_in/=(i*i);
if(d_in==1) break;
}
if(d_in==1) break;
}
int do_aGcd=__gcd(d_out,a);
ans_b1=d_out/do_aGcd,ans_b2=d_in,ans_b3=a/do_aGcd;
}
if(a!=0&&b!=0){
int a_bGcd=__gcd(a,b);
a/=a_bGcd;
b/=a_bGcd;
}
if(ans_b2==1&&d!=0){
if(b==0){
cout<<ans_b1;
if(ans_b3!=1)cout<<'/'<<ans_b3;
}
else{
if(isZheng){
int t=ans_b3*a/__gcd(ans_b3,a);
ans_b1*=(t/ans_b3);
b*=(t/a);
int gcd=__gcd(ans_b1+b,t);
cout<<(ans_b1+b)/gcd;
if(t/gcd!=1)cout<<'/'<<t/gcd;
}
else{
if(b>ans_b1){
cout<<'-';
swap(b,ans_b1);
}
int t=ans_b3*a/__gcd(ans_b3,a);
ans_b1*=(t/ans_b3);
b*=(t/a);
if(ans_b1-b==0) cout<<0;
else{
int gcd=__gcd(ans_b1-b,t);
cout<<(ans_b1-b)/gcd;
if(t/gcd!=1)cout<<'/'<<t/gcd;
}
}
}
}
else if(b!=0){
if(!isZheng){
cout<<'-';
}
cout<<b;
if(a!=1&&b!=0) cout<<'/'<<a;
}
if(d>1&&ans_b2>1){
if(b!=0) cout<<'+';
if(ans_b1!=1) cout<<ans_b1<<'*';
printf("sqrt(%d)",ans_b2);
if(ans_b3!=1) cout<<'/'<<ans_b3;
}
if(d==0&&b==0) cout<<0;
cout<<endl;
}
}
return 0;
}
结果 70分 3个RE
Runtime Error.
Received signal 8: Floating-point exception.
查了,网上说可能是除0错误,但我找不出(可能我眼睛不好)