求助,30分
查看原帖
求助,30分
672757
封禁用户楼主2024/10/1 13:55
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,m,ds,fs;
int fm1,fz1,fm2,fz2;
int gcd(int a, int b) 
{
    return b == 0 ? a : gcd(b, a % b);
}
void yf(int *x,int *y)
{
	int g=gcd(abs(*x),abs(*y));
	*x/=g,*y/=g;
}
void gh(int *x,int *y)
{
	while(1)
	{
		bool j=0;
		for(int i=2;i*i<=*y;i++)
		{
			if(!(*y%(i*i)))
			{
				j=1,*x*=i,*y/=(i*i);
				break;
			}
		}
		if(!j)
		{
			break;
		}
	}
}
int main()
{
	int N;
	for(cin>>N>>m;N;N--)
	{
		a=b=c=d=fm1=fz1=fm2=fz2=0,fs=1;
		cin>>a>>b>>c;
		d=b*b-4*a*c;
		if(d<0)
		{
			printf("NO\n");
			continue;
		}
		if((!b&&!c)||(-1*b==sqrt(d)))
		{
			cout<<0<<"\n";
			continue;
		}
		fz1=-1*b,fm1=2*a;
		yf(&fz1,&fm1);
		ds=d,gh(&fs,&ds);
		fz2=abs(fs),fm2=abs(2*a),yf(&fz2,&fm2);
		if(d==1||ds==1)//||!(fz2%fm2))
		{
			//printf("1:           ");
			int x,y,z,t;
			x=fz1*(-1*b<0?-1:1),y=fm1*(a<0?-1:1),z=fz2*(fs<0?-1:1),t=fm2*(a<0?-1:1);
			x*=t,z*=y;
			x=abs(x)*(x*y<0?-1:1),y=abs(y)*abs(t);
			z=abs(z)*(z*t<0?-1:1),t=abs(y);
			x+=(z*(a<0?-1:1));
			z=x;
			x=abs(x);
			y=abs(y);
			yf(&x,&y);
			if(z*t<0)
			{
				cout<<"-";
			}
			printf("%d",x);
			if(y!=1)
			{
				printf("/%d",y);
			}
			printf("\n");
			continue;
		}
		if(fz1*fm1)
		{
			if(fz1*fm1<0)
			{
				printf("-");
			}
			if(abs(fm1)==1)
			{
				printf("%d",abs(fz1));
			}
			else
			{
				printf("%d/%d",abs(fz1),abs(fm1));
			}
			if(!d)
			{
				//printf("2:");
				printf("\n");
				continue;
			}	
		}
		//printf("3:           ");
		if((a<0?-1:1)*fs*a<0)
		{
			cout<<"-";
		}
		else
		{
			if(fz1*fm1)
			{
				printf("+");
			}
		}
		fz2=abs(fz2),fm2=abs(fm2);
		if(ds==1||fz2!=1)
		{
			cout<<fz2;
		}
		if(ds!=1)
		{
			if(fz2!=1)
			{
				cout<<"*";
			}
			printf("sqrt(%d)",ds);
		}
		if(fm2!=1)
		{
			printf("/%d",fm2);
		}
		printf("\n");
	}
	return 0;
 } 

输入1 8 7 我的输出 7 正确输出-1

2024/10/1 13:55
加载中...