0分求助,悬赏2关
查看原帖
0分求助,悬赏2关
740350
FS_qwq楼主2023/11/11 21:00

调了好久呜呜。

#include<bits/stdc++.h>
using namespace std;
int n,k,a,b,c,i,hj1,hj2;
void hj(int a){//比如根号8,这里把他化简成2倍根号2 
	int i;
	for(i=4;i<=a;i++){
		if(i%5!=0&&i%5!=1&&i%5!=4)continue;
		else if(a%i==0&&sqrt(i)*sqrt(i)==i){
			hj1=sqrt(i);
			hj2=a/i;
		}
	}
	return;
}
int main(){
	cin>>n>>k;
	for(i=1;i<=n;i++){
		hj1=0;hj2=0;
		cin>>a>>b>>c;
		if(b==0){
			int d=-(c/a);
			if(d<0)cout<<"NO"<<endl;
			hj(d);
			if(hj1==0&&hj2==0)cout<<"sqrt("<<d<<")"<<endl;
			else cout<<hj1<<"*sqrt("<<hj2<<")"<<endl;
			hj1=0;hj2=0;
			continue;
		}
		int k=b*b-4*a*c;
		if(k<0)cout<<"NO"<<endl;
		else if(k==0){
			int u=(-b)/(__gcd(-b,2*a)),v=(2*a)/(__gcd(-b,2*a)); 
			if(u<0&&v<0){//这其实是防止输出向-3/-2这样子的 
				u=-u;v=-v;
			}
			if(u%v==0)cout<<u/v<<endl;
			else{//其实就是把所有的负号都转移到最前面,防止3/-2,需要弄成-3/2 
				if(u<0&&v>=0)cout<<-u<<"/"<<v<<endl;//其实这里就是在化简成最简分数,比如8/6,搞成4/3
				else if(u>=0&&v<0)cout<<-u<<"/"<<-v<<endl;
				else cout<<u<<"/"<<v<<endl;
			}
		}else if(k>0){
			if(sqrt(k)*sqrt(k)==k){
				int d=-b+sqrt(k);
				int u=d/(__gcd(d,2*a)),v=(2*a)/(__gcd(d,2*a));
				if(u<0&&v<0){
					u=-u;v=-v;
				}
				if(u%v==0)cout<<u/v<<endl;
				else{
					if(u<0&&v>=0)cout<<-u<<"/"<<v<<endl;
					else if(u>=0&&v<0)cout<<-u<<"/"<<-v<<endl;
					else cout<<u<<"/"<<v<<endl;
				}
			}else{
				hj(k);
				if(hj1==0&&hj2==0){
					int u=(-b)/(__gcd(-b,2*a)),v=(2*a)/(__gcd(-b,2*a));
					if(u<0&&v<0){
						u=-u;v=-v;
					}
					if(u%v==0)cout<<u/v;
					else{
						if(u<0&&v>=0)cout<<-u<<"/"<<v;
						else if(u>=0&&v<0)cout<<-u<<"/"<<-v;
						else cout<<u<<"/"<<v;
					}
					cout<<"+sqrt("<<k<<")/"<<2*a<<endl;
				}else{
					int u=(-b)/(__gcd(-b,2*a)),v=(2*a)/(__gcd(-b,2*a));
					if(u<0&&v<0){
						u=-u;v=-v;
					}
					if(u%v==0)cout<<u/v;
					else{
						if(u<0&&v>=0)cout<<-u<<"/"<<v;
						else if(u>=0&&v<0)cout<<-u<<"/"<<-v;
						else cout<<u<<"/"<<v;
					}
					int u2=hj1/(__gcd(hj1,2*a)),v2=(2*a)/(__gcd(hj1,2*a));
					if(u2<0&&v2<0){
						u2=-u2;v2=-v2;
					}
					if(u2%v2==0)cout<<"+"<<u2/v2<<"*sqrt("<<hj2<<")"<<endl;
					else{
						if(u2<0&&v2>=0){
							if(u2!=1)cout<<-u2<<"*sqrt("<<hj2<<")"<<"/"<<v2<<endl;
							else cout<<"sqrt("<<hj2<<")"<<"/"<<v2<<endl;
						}
						else if(u2>=0&&v2<0){
							if(u2!=1)cout<<-u2<<"*sqrt("<<hj2<<")"<<"/"<<-v2<<endl;
							else cout<<"sqrt("<<hj2<<")"<<"/"<<-v2<<endl;
						}
						else{
							if(u2!=1)cout<<"+"<<u2<<"*sqrt("<<hj2<<")"<<"/"<<v2<<endl;
							else cout<<"+sqrt("<<hj2<<")"<<"/"<<v2<<endl;
						}
					}
				}
			}
		}
	}
	return 0;
}
2023/11/11 21:00
加载中...