代码如下(本蒟蒻第一次参加复赛,代码较丑勿喷)
#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c,tong[100001],f1,q1=1,delta1;
int pd(int d){ //判断质数
if(d<2) return 0;
if(d==2) return 1;
for(int i=2;i<=sqrt(d);i++){
if(d%i==0) return 0;
}
return 1;
}
void huajian(){ //化简根式
if(f1==1) return ;
if(delta1==1){
f1=1;
return ;
}
if(pd(delta1)==1){
if(tong[delta1]==1) q1=q1*delta1;
f1=1;
return ;
}
for(int i=2;i<=sqrt(delta1);i++){ //查询是在该数中否有两个质数因数 (如18中有2个3)
if(delta1%i==0&&pd(i)==1){
tong[i]++;
delta1=delta1/i;
if(tong[i]==2){
q1=q1*i;
tong[i]=0;
}
huajian();
}
}
return ;
}
void cout1(int flag,int zi,int mu){ //有理数输出
if(flag==1) cout<<"-";
cout<<zi;
if(mu!=1) cout<<"/"<<mu;
}
void cout2(int zi,int mu,int delta){ //无理数输出
cout<<zi<<"*sqrt("<<delta<<")/"<<mu<<endl;
}
void fenshu(int zi,int mu,int cyh,int delta){ //分子,分母,是否为有理数 ,无理数根号下的值(专门给cout2函数的)
int flag;
if(zi<0&&mu>0){
flag=1;
zi=-zi;
}
if(zi>0&&mu<0){
flag=1;
mu=-mu;
}
if(zi<0&&mu<0){
zi=-zi;
mu=-mu;
}
int f[100001],tmp=1;
for(int i=2;i<=zi;i++){ //找质数因数
if(zi%i==0&&pd(i)==1){
f[tmp]=i;
tmp++;
}
}
if(zi==2){
f[tmp]=2;
tmp++;
}
for(int i=1;i<tmp;i++){ //约分
if(mu%f[i]==0&&zi%f[i]==0){
mu=mu/f[i];
zi=zi/f[i];
i--;
continue;
}
}
if(cyh==0) cout1(flag,zi,mu); //有理数输出
else cout2(zi,mu,delta); //无理数输出
}
int main(){
//freopen("uqe.in","r",stdin);
//freopen("uqe.out","w",stdout);
cin>>t>>m;
while(t--){
memset(tong,0,sizeof(tong)); //数组清0
q1=1;
f1=0;
cin>>a>>b>>c;
int delta=b*b-4*a*c; //判别式
if(delta<0){ //无解
cout<<"NO"<<endl;
continue;
}
int t=sqrt(delta);
if(t*t==delta){ //解为有理数
if(a>0){ //a>0:分母越大值越大
fenshu(-b+t,2*a,0,0);
cout<<endl;
}
else{ //a<0:分母越小值越大
fenshu(-b-t,2*a,0,0);
cout<<endl;
}
}
else{ //解为无理数
if(b!=0){ //输出根式的有理数部分
fenshu(-b,2*a,0,0);
cout<<"+";
}
delta1=delta;
huajian(); //化简delta1,求出delta里能提取出的最大平方数的算术平方根(如18中最大数是3)
delta=(delta/q1)/q1; //化简delta
if(q1==abs(2*a)) cout<<"sqrt("<<delta<<")"<<endl; //根式系数为1
else if(q1%abs(2*a)==0) cout<<q1/abs(2*a)<<"*"<<"sqrt("<<delta<<")"<<endl; //根式系数为整数
else if(abs(2*a)%q1==0) cout<<"sqrt("<<delta<<")/"<<abs(2*a)/q1<<endl; //根式系数的倒数为整数(如1/18)
else fenshu(q1,abs(2*a),1,delta);
}
}
return 0;
}
跪求各位大佬帮忙调代码!