P9750一元二次方程全WA,求教
  • 板块题目总版
  • 楼主178com
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/28 09:52
  • 上次更新2024/7/28 11:07:09
查看原帖
P9750一元二次方程全WA,求教
1055249
178com楼主2024/7/28 09:52

My Code:

#include <bits/stdc++.h>
using namespace std;
int T,M;
int gcd(int a,int b){
	if(b==0) return a;
	return gcd(b,a%b);
}
int main(){
	scanf("%d%d",&T,&M);
	while(T--){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		if(a<0){
			a=-a;b=-b;c=-c;
		}
		int d=b*b-4*a*c;
		if(d<0){
			printf("NO");
			continue;
		}
		int p=1;
		for(int i=sqrt(d);i>=1;i--){
			if(d%(i*i)==0){
				d/=(i*i);p=i;break;
			}
		}
		int g2=gcd(abs(p),abs(2*a));
		if(d==1 || d==0){
			if(a>0) b=b-p*d;
			else b=b+p*d;
		}
		
		int flag=0;
		if(b!=0){
			flag=1;
			int g1=gcd(abs(b),abs(2*a));
			if(b%(2*a)==0){
				printf("%d",(0-b)/(2*a));
			}
			else if(a>0) printf("%d/%d",(0-b)/g1,(2*a)/g1);
			else printf("%d/%d",(b)/g1,(-2*a)/g1);
			if(d==1) continue;
		} 
		if(d==0){
			if(!flag) printf("0"); 
			continue;
		} 
		
		if(flag) printf("+");
		if(p%(2*a)==0){
			printf("%d*sqrt(%d)",p/(2*a),d);
		}
		else if(a>0){
			if(p/g2!=1) printf("%d*",p/g2);
			printf("sqrt(%d)/%d",d,(2*a)/g2);
		} 
		else{
			if(p/g2!=1) printf("%d*",p/g2);
			printf("sqrt(%d)/%d",d,(-2*a)/g2);
		}printf("\n");
	}
	return 0;
}
2024/7/28 09:52
加载中...