10pts求调
查看原帖
10pts求调
1063878
Castrated_Orange楼主2024/8/2 12:05

马蜂巨丑见谅

#include<bits/stdc++.h>
using namespace std;
int p,q,zuo,you;
bool flag=0;
void go(){
	int asd=min(p,q); 
	for(int i=2;i<=asd;i++){
		while(p%i==0&&q%i==0){
			p/=i;
			q/=i;
		}
	}
}
void sqr(int sum){
	zuo=1;
	you=sum;
	for(int i=2;i*i<=sum;i++){
		while(sum%(i*i)==0){
			sum/=(i*i);
			zuo*=i;
			you/=(i*i);
		}
	}
}
void print(int p,int q,int sum){
	if(p==0){
		return;
	}
	else{
		if(sum%2==0){
			cout<<"-";
		}
		flag=1;
		if(q==1){
			cout<<p;
		}
		else{
			cout<<p<<"/"<<q;
		}
	}
}
bool judge(int delta){
	int del=sqrt(delta);
	if(del*del==delta){
		return 1;
	}
	return 0;
}
void Print(int A,int B,int C){
	p=A;
	q=C;
	go();
	if(p==0){
		return;
	}
	else{
		if(flag==1){
			cout<<"+";
		}
		flag=1;
		if(p==1){
			cout<<"sqrt("<<B<<")";
		}
		else{
			cout<<p<<"*sqrt("<<B<<")";
		}
		if(q==1){
			return;
		}
		else{
			cout<<"/"<<q;
		}
	}
}
int main(){
	//freopen("uqe.in","r",stdin);
	//freopen("uqe.out","w",stdout);
	int T,M;
	cin>>T>>M;
	while(T--){
		flag=0;
		int a,b,c;
		cin>>a>>b>>c;
		double delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
			continue;
		}
		else if(judge(delta)){
			q=2*a;
			if(q<0){
				p=-b-sqrt(delta);
			}
			else{
				p=-b+sqrt(delta);
			}
			int sum=0;
			if(p<0)sum++;
			if(q<0)sum++;
			p=abs(p);
			q=abs(q);
			go();
			print(p,q,sum);
		}
		else{
			q=2*a;
			p=-b;
			int num=0;
			if(p<0)num++;
			if(q<0)num++;
			p=abs(p);
			q=abs(q);
			go();
			print(p,q,num);
			q=2*a;
			sqr(delta);
			Print(zuo,you,q);
		}
		if(flag==0){
			cout<<0;
		}
		cout<<endl;
	}
    return 0;
}

玄3关

2024/8/2 12:05
加载中...