代码:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
if(b==0)return a;
return gcd(b,a%b);
}
void yf(int x,int y){
if(x==y){
printf("1");
return;
}
int k=gcd(abs(x),abs(y));
x/=k;y/=k;
printf("%d/%d",x,y);
}
void yf2(int fenzi,int fenmu,int delta){
if(fenzi%fenmu==0){
if(fenzi/fenmu==1){
printf("sqrt(%d)\n",delta);
return;
}
printf("%d*sqrt(%d)\n",fenzi/fenmu,delta);
return;
}
int k=gcd(abs(fenzi),abs(fenmu));
fenzi/=k;
fenmu/=k;
if(fenzi==1){
printf("sqrt(%d)/%d\n",delta,fenmu);
return;
}
printf("%d*sqrt(%d)/%d\n",fenzi,delta,fenmu);
}
bool check1(int x){
int k=sqrt(x);
return k*k == x;
}
int check2(int x){
int ret=1;
for(int i=2;i*i<=x;++i){
if(x%(i*i)==0){
ret=i;
}
}
return ret;
}
int main(){
int t,m;
scanf("%d%d",&t,&m);
while(t--){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<0){
a*=-1;
b*=-1;
c*=-1;
}
int delta = b*b-4*a*c;
if(delta<0){
puts("NO");
continue;
}
if(check1(delta)){
int ret;
int k=sqrt(delta);
ret=1.0*(-b+k)/(2*a);
if((-b+k)%(2*a)==0){
printf("%d\n",ret);
continue;
}
yf(-b+k,2*a);
puts("");
continue;
}
if(b){
yf(-b,2*a);
printf("+");
}
int inzi=check2(delta);
delta=delta/(inzi*inzi);
yf2(inzi,2*a,delta);
}
return 0;
}
问题:WA,3个点都是读到'/'实际上是'+'