10分求助
查看原帖
10分求助
1062722
xiao999yao楼主2024/7/23 18:36

代码如下:(C++)

#include<bits/stdc++.h>
#define int long long
using namespace std;
double t,m,a,b,c,v,x,q,p,g;
bool pingfang(double n){
	if((int)sqrt(n)*(int)sqrt(n)==n){
		return true;
	}
	return false;
}
void print(int a,int b){
	if(a*b<0)cout<<"-";
	a=abs(a);
	b=abs(b);
	int g=__gcd(a,b);
	a/=g;
	b/=g;
	if(a==0)return;
	if(b==1)cout<<a;
	else cout<<a<<"/"<<b;
}
void printc(int a,int c,int b){
	a=abs(a);
	b=abs(b);
	int g=__gcd(a,b);
	a/=g;
	b/=g;
	if(a!=1)cout<<a<<"*";
	cout<<"sqrt("<<c<<")";
	if(b!=1)cout<<"/"<<b;
//	if(a==1&&b==1)cout<<"sqrt("<<c<<")";
//	else if(b==1)cout<<a<<"*sqrt("<<c<<")";
//	else cout<<a<<"*sqrt("<<c<<")/"<<b;
}
signed main(){
//	freopen("3.in","r",stdin);
//	freopen("3.out","w",stdout);
	cin>>t>>m;
	for(x=1;x<=t;x++){
		cin>>a>>b>>c;
		v=b*b-4*a*c;
		if(v<0){
			cout<<"NO"<<endl;
			continue;
		}
		for(int i=v;i>=0;i--){
			if(i!=0&&(int)v%(int)i!=0)continue;
			if(!pingfang(i))continue;
//			if(i==1){
//				cout<<"sqrt("<<v<<")";
//			}
			if(i!=v){
				if(-b!=0){
					print(-b,2*a);
					cout<<"+";
				}
				printc(sqrt(i),v/(i),2*a);
			}
			else print(-b+sqrt(i),2*a);
			cout<<endl;
			break;
		}
	}
	return 0;
}

2024/7/23 18:36
加载中...