问
查看原帖
问
1040109
_Deer_Peach_楼主2024/8/24 15:12
#include<bits/stdc++.h>
using namespace std;
int t,m;
signed main(){
	cin>>t>>m;while(t--){
		int a,b,c;scanf("%d %d %d",&a,&b,&c);
		int cnt=b*b-4*a*c;if(cnt<0){cout<<"NO\n";continue;}
		int scnt=sqrt(cnt);if(scnt*scnt==cnt){
			if(a>0){
				int cntt=max(-b+scnt,-b-scnt);if(cntt){
					if(abs(cntt)%(2*a)){
						int x=2*a,gcd=__gcd(abs(cntt),abs(x));x/=gcd;cntt/=gcd;
						if(x<0)cout<<-cntt<<"/"<<-x;
						else cout<<cntt<<"/"<<x;
					}else cout<<cntt/2/a;					
				}else cout<<0;
			}else{
				int cntt=min(-b+scnt,-b-scnt);if(cntt){
					if(abs(cntt)%abs(2*a)){
						int x=2*a;cntt=cntt;int gcd=__gcd(abs(x),abs(cntt));
						x/=gcd;cntt/=gcd;if(x>0)cout<<cntt<<"/"<<x;
						else cout<<-cntt<<"/"<<-x;
					}else cout<<cntt/2/a;					
				}else cout<<0;
			}
		}else{
			int q1=-b,q2;for(int i=1;i<=cnt;i++){
				if(cnt%i==0){
					int x=cnt/i;x=sqrt(x);if(x*x==cnt/i){
						q2=x;break;
					}
				}
			}if(cnt<0)q2=-q2;int r=cnt/q2/q2;if(q1!=0){
				if(q1%(2*a)){
					int x=2*a,gcd=__gcd(x,q1);x/=gcd;q1/=gcd;
					if(x<0)cout<<-q1<<"/"<<-x<<"+";
					else cout<<q1<<"/"<<x<<"+";
				}else cout<<q1/2/a<<"+";
			}if(abs(q2)==abs(2*a))cout<<"sqrt("<<r<<")";
			else if(q2%(2*a)==0)cout<<abs(q2/2/a)<<"*"<<"sqrt("<<r<<")";//为什么不求绝对值会错
			else if((2*a)%q2==0)cout<<"sqrt("<<r<<")/"<<abs(2*a/q2);//为什么不求绝对值会错
			else{int x=2*a,gcd=__gcd(x,q2);cout<<abs(q2/gcd)<<"*sqrt("<<r<<")/"<<abs(x/gcd);}//为什么要求绝对值会错
		}cout<<endl;
	}return 0;	
}

为什么不求绝对值会错?

2024/8/24 15:12
加载中...