查看原帖
916767
Luogu_916767楼主2024/9/29 22:03

10分求助,不知道哪里错了。

#include<iostream>
#include<bits/stdc++.h>

using namespace std;

int t,m;

void print_youlishu(int a,int b){
	//                  a/b
	int _ = __gcd(a,b);
	a /= _;
	b /= _;
	if(b < 0){
		b = -b;
		a = -a;
	}
	if(a == 0){
		cout<<0;
		return ;
	}
	if(b == 1){
		printf("%d",a);
	}else{
		printf("%d/%d",a,b);
	}
}

void print_wulishu(int a,int c,int b){
	if(b < 0){
		b = -b;
		a = -a;
	}
	int _ = __gcd(a,b);
	a /= _;
	b /= _;
	if(a == b){
		printf("sqrt(%d)",c);
		return ;
	}
	if(a == 1){
		printf("sqrt(%d)/%d",c,b);
		return ;
	}
	if(b == 1){
		printf("%d*sqrt(%d)",a,c);
	}else{
		printf("%d*sqrt(%d)/%d",a,c,b);
	}
	return ;
}

void work(int a,int b,int c){
	int sjx = b*b-4*a*c;
	if(sjx < 0){
		cout<<"NO\n";
		return ;
	}
	if((int)(sqrt(sjx))*(int)(sqrt(sjx)) == sjx){
		print_youlishu(sqrt(sjx)-b,2*a);
		puts("");
		return ;
	}
	if(b != 0){
		print_youlishu(-b,2*a);
		cout<<"+";
	}
	//求sqrt(sjx)/2a
	int f = 1;
	for(int i = 2; i*i <= sjx; i ++ ){
		while(sjx%(i*i) == 0){
			sjx /= i*i;
			f *= i;
		}
	}
	print_wulishu(f,sjx,2*a);
	puts("");
}

int main(){
	cin>>t>>m;
	for(int i = 1; i <= t; i ++ ){
		int a,b,c;
		cin>>a>>b>>c;
		work(a,b,c);
	}
	return 0;
}
2024/9/29 22:03
加载中...