为什么这段代码只有40Pts
查看原帖
为什么这段代码只有40Pts
324119
SDF_RyanLin楼主2024/10/21 01:14

只针对特殊性质C编程

但是似乎对a<0这一地方处理出现了问题,本蒟蒻发现不了哪里有问题,请求各位大佬帮忙debug一下(哭)

#include<bits/stdc++.h>
#define int long long 
using namespace std;		
int T,M,t[10005];
int op(int n){
	for(int i=1;i<=n;i++)t[i]=0;
	int lisn=n;
	for(int i=2;i<=lisn;i++){
        while(lisn%i==0){
            t[i]++;
            lisn/=i;
        }
    }
    int ans=1;
    //for(int i=1;i<=n;i++)cout<<i<<' '<<t[i]<<endl;
	for(int i=1;i<=n;i++){
		while(t[i]>=2){
			ans*=i;
			t[i]-=2;
		}
	}
	return ans;
}//对delta可开方处开方 
void solve(int a,int b,int c){
	int delta=b*b-4*a*c;
	if(delta<0){
		printf("NO\n");
		return;
	}
	if(a>0){
	if(delta>=0){
		int lis=sqrt(delta);
		if(lis*lis==delta){
			int fenzi=lis-b;
			int fenmu=2*a;
			int ys=__gcd(abs(fenzi),abs(fenmu));
			fenzi/=ys;fenmu/=ys;
			if(fenzi>0&&fenmu>0){
				if(fenmu==1){
					printf("%lld\n",fenzi);
					return;
				}
				else{
					printf("%lld/%lld\n",fenzi,fenmu);
					return;
				}
			}
			else if(fenzi==0){printf("0\n");return;} 
			else {
				if(fenmu==1){printf("%lld\n",fenzi);return;}
				else {
					printf("%lld/%lld\n",fenzi,fenmu);
					return;
				}
			}
		}
	}
	}
	else if(a<0){
	if(delta>=0){
		int lis=sqrt(delta);
		if(lis*lis==delta){
			int fenzi=-lis-b;
			int fenmu=2*a;
			int ys=__gcd(abs(fenzi),abs(fenmu));
			fenzi/=ys;fenmu/=ys;
			if(fenzi<0&&fenmu<0){
				fenzi=abs(fenzi),fenmu=abs(fenmu);
				if(fenmu==1){printf("%lld\n",fenzi);return;}
				else {printf("%lld/%lld\n",fenzi,fenmu);return;}
			}
			else if(fenzi==0){printf("0\n");return;} 
			else {
				if(fenmu==-1){printf("%-lld\n",fenzi);return;}
				else {
					fenzi=abs(fenzi),fenmu=abs(fenmu);
					printf("-%lld/%lld\n",fenzi,fenmu);
					return;
				}
			}
		}
	}
	}
}
signed main(){
	scanf("%lld%lld",&T,&M);
	for(int i=1;i<=T;i++){
		int a,b,c;
		scanf("%lld%lld%lld",&a,&b,&c);
		solve(a,b,c);
	}
	return 0;
}
2024/10/21 01:14
加载中...