为什么结果都对,不给过?求帮忙解决
查看原帖
为什么结果都对,不给过?求帮忙解决
1068944
xzl931122楼主2024/1/6 10:30
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int gcd(int x1,int  x2)
{
	if(x2==0) return x1;
	return gcd(x2,x1%x2);
} 
int main()
{
	/*freopen("uqe2.in","r",stdin);
    freopen("2.out","w",stdout);*/
	int z,m,k,a,b,c,t,d;
	cin>>z>>m;
	for(int i=1;i<=z;i++)
	{
		cin>>a>>b>>c;
		d=pow(b,2)-4*a*c,k=1;
		if(d<0) 
		{
			cout<<"NO\n";
			continue;
		}
		if(a<0) 
		{
			a=-a;b=-b;c=-c;
		}
		for(int i=2;i*i<=d;i++)
		{
			while(d%(i*i)==0)
			{
				k*=i;d/=(i*i);
			}
		}
		if(d==0||d==1) 
		{
			t=abs(gcd(2*a,-b+k*d));
			cout<<(-b+k*d)/t;
			if(2*a/t!=1) cout<<"/"<<2*a/t;
			cout<<"\n";
			continue;
		}
		if(b==0) 
		{
			t=gcd(k,2*a);
			cout<<k/t<<"*sqrt("<<d<<")";
			if(2*a/t!=1) cout<<"/"<<2*a/t;
			cout<<"\n";
			continue;
		}
		int t1=abs(gcd(-b,2*a));
		int t2=abs(gcd(k,2*a));
		if(2*a/t1==1&&2*a/t2==1) 
		{
			if(k/t2!=1)	cout<<-b/t1<<"+"<<k/t2<<"*sqrt("<<d<<")"<<"\n";
			else  cout<<-b/t1<<"+"<<"sqrt("<<d<<")"<<"\n";
			continue;
		} 
		else if(2*a/t1==1) 
		{	
			if(k/t2!=1)cout<<-b/t1<<"+"<<k/t2<<"*sqrt("<<d<<")"<<"/"<<2*a/t2<<"\n";
			else cout<<-b/t1<<"+"<<"sqrt("<<d<<")"<<"/"<<2*a/t2<<"\n";
			continue;
		}
		else if(2*a/t2==1) 
		{
			if(k/t2!=1)cout<<-b/t1<<"/"<<2*a/t1<<"+"<<k/t2<<"*sqrt("<<d<<")"<<"\n";
			else cout<<-b/t1<<"/"<<2*a/t1<<"+"<<"sqrt("<<d<<")"<<"\n";
			continue;
		}
		else 
		{
			if(k/t2!=1)cout<<-b/t1<<"/"<<2*a/t1<<"+"<<k/t2<<"*sqrt("<<d<<")"<<"/"<<2*a/t2<<"\n";
			else cout<<-b/t1<<"/"<<2*a/t1<<"+"<<"sqrt("<<d<<")"<<"/"<<2*a/t2<<"\n";
			continue;
		}
	}	
	return 0;
}
2024/1/6 10:30
加载中...