求帮改,悬关
查看原帖
求帮改,悬关
974277
水星湖psgqwq楼主2024/1/25 09:41
#include<bits/stdc++.h>
using namespace std;

int main()
{
	while(1)
	{
		long long a,b,c;
		cin>>a>>b>>c;
		long long pan = b*b-4*a*c;
		if(pan<0)
			cout<<"NO"<<endl;
		else
		{
			if((long long)(sqrt(pan))*(long long)(sqrt(pan))==pan)
			{
				int p;
				if((-b+sqrt(pan))/2/a>(-b-sqrt(pan))/2/a)
					p = -b+sqrt(pan);
				else 
					p = -b-sqrt(pan);
				int q = 2*a;
				if(1.0*p/q==p/q)
					cout<<p/q<<endl;
				else
				{
					int k = __gcd(p,q);
					if(q/k<0){
						q*=-1,p*=-1; 
					}
					cout<<p/k<<"/"<<q/k<<endl;
				}
			}
			else 
			{
				if(1.0*-b/2/a!=0)
				{
					int k = __gcd(-b,2*a);
					int p = -b/k,q = 2*a/k;
					if(q<0)
						q*=-1,p*=-1;
					if(q==1)cout<<p<<"+";
					else cout<<p<<"/"<<q<<"+";
				}
				int xi = 1;
				if(a<0)xi*=-1;
				for(int i=2;i<=1000;i++)
					while(pan%(i*i)==0)
						pan/=i*i,xi *= i;
				double q2 = 1.0 * xi / 2 / a;
				int d = 2 * a;
				int k = __gcd(xi,d);
				xi/=k,d/=k;
				if(q2==1)cout<<"sqrt("<<pan<<")"<<endl;
				else if(q2==int(q2))cout<<q2<<"*"<<"sqrt("<<pan<<")"<<endl;
				else if(1/q2==int(1/q2))cout<<"sqrt("<<pan<<")/"<<1/q2<<endl;
				else{
						
						if(xi!=1)
							cout<<xi<<"*sqrt("<<pan<<")/"<<d<<endl;
						else cout<<"sqrt("<<pan<<")/"<<d<<endl;
				}
			}
		}
	}
	return 0;
}

这份代码能AC的 只是去掉了 t,mt,m 的输入,想自己平时做题用,求帮改成能按照格式输出两个解的。

2024/1/25 09:41
加载中...