10pts求助(有错但不知道怎么改)
查看原帖
10pts求助(有错但不知道怎么改)
1180206
Alex866楼主2024/10/13 21:49
#include<bits/stdc++.h>
using namespace std;
int a,b,c,t,m;
double delta;
void print(int a,int b){//a/b
	int tmp=__gcd(a,b);
	a/=tmp;
	b/=tmp;
	if(a==0){
		return;
	}
	if(b==1){
		cout<<a;
		return;
	}
	if((a<0)^(b<0)){
		a=abs(a);
		b=abs(b);
		cout<<"-"<<a;
		if(b!=1){
			cout<<"/"<<b;
		}
	}else{
		a=abs(a);
		b=abs(b);
		cout<<a;
		if(b!=1){
			cout<<"/"<<b;
		}
	}
}
void printsq(int a,int b,int c){//a*sqrt(b)/c
	int tmp=__gcd(a,c);
	a/=tmp;
	c/=tmp;
	if((a<0)^(b<0)){
		a=abs(a);
		b=abs(b);
		cout<<"-";
		if(a!=1){
			cout<<a<<"*";
		}
		cout<<"sqrt("<<b<<")";
		if(c!=1){
			cout<<"/"<<c;
		}
	}else{
		a=abs(a);
		b=abs(b);
		if(a!=1){
			cout<<a<<"*";
		}
		cout<<"sqrt("<<b<<")";
		if(c!=1){
			cout<<"/"<<c;
		}
	}
}
void printsq(int a,int b){//sqrt(a)/b
	int sum=1;
	for(int i=2;i<sqrt(a);i++){
		while(a%(i*i)==0){
			a/=(i*i);
			sum*=i;
		}
	}
	if(a==1){
		print(a,b);
	}else{
		printsq(sum,a,b);
	}
}
signed main(){
	ios_base::sync_with_stdio(0);
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>t>>m;
	while(t--){
		cin>>a>>b>>c;
		delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO";
		}else if(delta==0){
			print(-b,2*a);
			if(-b*1./(2*a)==0){
				cout<<0;
			}
		}else{
			if(pow(int(sqrt(delta)),2)==delta){
				print(-b+int(sqrt(delta)),2*a);
				if((-b*1.+int(sqrt(delta)))/(2*a)==0){
					cout<<0;
				}
			}else{
				print(-b,2*a);
				if((-b*1./(2*a))&&(a>0)){
					cout<<"+";
				}
				printsq(delta,2*a);
			}
		}
		cout<<"\n";
	}
	return 0;
}
2024/10/13 21:49
加载中...