10分,救一下啊
查看原帖
10分,救一下啊
1106396
Cong256楼主2024/9/29 21:52

写的很乱,请见谅。

#include<bits/stdc++.h>
using namespace std;
void printy(int a,int b){//输出函数。
	int g=__gcd(abs(a),abs(b));
	int q=abs(b/g),p=abs(a/g)*(a*b?-1:1);
	if(p==0)	cout<<0;
	else if(q==1)	cout<<p;
	else printf("%d/%d",p,q);
}
int find(int d){//将一个数换成rt*sqrt(d)形式的数。
	int rt=1;
	for(int i=2;i<d;i++){
		while(d%(i*i)==0){
			d/=i*i;
			rt*=i;
		}
	}
	return rt;
}
int main(){
	int qwertyuiop,asdfghjkl;
	cin>>qwertyuiop>>asdfghjkl;
	while(qwertyuiop--){
		int a,b,c;
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0)	cout<<"NO"<<endl;
		else if(delta==0)	printy(-b,2*a),cout<<endl;
		else{
			if(b!=0){printy(-b,2*a);cout<<"+";}
			int rt=find(delta),y=delta/rt/rt;
			if(rt==abs(2*a)){
				cout<<"sqrt("<<y<<")"<<endl;
			}else if(rt%abs(2*a)==0){
				cout<<rt/(2*a)<<"*sqrt("<<y<<")"<<endl;
			}else if(abs(2*b)%rt==0){
				cout<<"sqrt("<<y<<")/"<<abs(2*a)/rt<<endl;
			}else{
				cout<<rt/__gcd(rt,abs(2*a))<<"*sqrt("<<y<<")/"<<abs(2*a)/__gcd(rt,abs(2*a))<<endl;
			}
		}
	}
}
2024/9/29 21:52
加载中...