70tps求助
查看原帖
70tps求助
1021365
Crab_Tang楼主2023/11/9 21:22

代码:

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
	if(b==0)return a;
	return gcd(b,a%b);
}
void yf(int x,int y){
	if(x==y){
		printf("1");
		return;
	}
	int k=gcd(abs(x),abs(y));
	x/=k;y/=k;
	printf("%d/%d",x,y);
}
void yf2(int fenzi,int fenmu,int delta){
	if(fenzi%fenmu==0){
		if(fenzi/fenmu==1){
			printf("sqrt(%d)\n",delta);
			return;
		}
		printf("%d*sqrt(%d)\n",fenzi/fenmu,delta);
		return;
	}
	int k=gcd(abs(fenzi),abs(fenmu));
	fenzi/=k;
	fenmu/=k;
	if(fenzi==1){
		printf("sqrt(%d)/%d\n",delta,fenmu);
		return;
	}
	printf("%d*sqrt(%d)/%d\n",fenzi,delta,fenmu);
}
bool check1(int x){
	int k=sqrt(x);
	return k*k == x;
}
int check2(int x){
	int ret=1;
	for(int i=2;i*i<=x;++i){
		if(x%(i*i)==0){
			ret=i;
		}
	}
	return ret;
}
int main(){
	int t,m;
	scanf("%d%d",&t,&m);
	while(t--){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		
		if(a<0){
			a*=-1;
			b*=-1;
			c*=-1;
		}
		int delta = b*b-4*a*c;
		if(delta<0){
			puts("NO");
			continue;
		}

		if(check1(delta)){
			int ret;
			int k=sqrt(delta);
			ret=1.0*(-b+k)/(2*a);
			if((-b+k)%(2*a)==0){
				printf("%d\n",ret);
				continue;
			}
			yf(-b+k,2*a);
			puts("");
			continue;
		}
		if(b){
			yf(-b,2*a);
			printf("+");
		}
		int inzi=check2(delta);
		delta=delta/(inzi*inzi);
		yf2(inzi,2*a,delta);
	}
	return 0;
}

问题:WA,3个点都是读到'/'实际上是'+'

2023/11/9 21:22
加载中...