这题难度4颗半星欧,但是在本小姐的帮助下你肯定会做哒——甜甜
还有,我谈恋爱啦!封面就是呦!分享给我的铁粉
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,c;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
void solve()
{
cin>>a>>b>>c;
ll san=b*b-4*a*c;
if(san<0)cout<<"NO\n";
else if(san==0||san==(int)(sqrt(san))*(int)(sqrt(san)))//可去根号--有理数
{
ll shang=-b+(a<0?-(int)(sqrt(san)):(int)(sqrt(san))),xia=2*a;
if(shang==0)//结果是0
{
cout<<"0\n";
}
else//有理数
{
ll g=gcd(abs(shang),abs(xia));
shang/=g;
xia/=g;
int f=0;
f+=shang>=0;
f+=xia>=0;
if(f==1)//结果是负数
{
if(abs(xia)==1)cout<<"-"<<abs(shang)<<"\n";
else cout<<"-"<<abs(shang)<<"/"<<abs(xia)<<"\n";
}
else //结果是正数
{
if(abs(xia)==1)cout<<abs(shang)<<"\n";
else cout<<abs(shang)<<"/"<<abs(xia)<<"\n";
}
}
}
else //无理数
{
//先输出q1 ,a此时一定不是0
if(b==0)
{
// cout<<"\n";
//不输出
}
else
{
ll shang1=-b,xia1=a*2;
ll g=gcd(abs(shang1),abs(xia1));
shang1/=g;
xia1/=g;
int f=0;
f+=shang1>=0;
f+=xia1>=0;
if(f==1)//结果是负数
{
if(abs(xia1)==1)cout<<"-"<<abs(shang1);
else cout<<"-"<<abs(shang1)<<"/"<<abs(xia1);
}
else //结果是正数
{
if(abs(xia1)==1)cout<<abs(shang1);
else cout<<abs(shang1)<<"/"<<abs(xia1);
}
}
//再输出q2*sqrt(r)
{
ll shang1=1,xia1=a*2,r=san;
for(int i=2; i*i<=r; i++)
{
while(r%(i*i)==0)
{
shang1*=i;
r/=i*i;
}
}
ll g=gcd(abs(shang1),abs(xia1));
shang1/=g;
xia1/=g;
if(b!=0)cout<<"+";
if(abs(shang1)!=1)
{
cout<<abs(shang1);
if(abs(xia1)==1)cout<<"*sqrt("<<r<<")";
else cout<<"*sqrt("<<r<<")/"<<abs(xia1);
}
else
{
if(abs(xia1)==1)cout<<"sqrt("<<r<<")";
else cout<<"sqrt("<<r<<")/"<<abs(xia1);
}
cout<<"\n";
}
}
}
int main()
{
// freopen("uqe.in", "r", stdin);
// freopen("uqe.out", "w", stdout);
int t,m;
cin>>t>>m;
while(t--)solve();
return 0;
}
//3272
题目描述
输入
输入的第一行包含两个正整数 T, M,分别表示方程数和系数绝对值的上界;
接下来 T 行,每行包含三个整数a, b, c。
输出
输出 T 行,每行包含一个字符串,表示对应询问的答案,格式如题面所述。
每行输出的字符串中间不应包含任何空格。
样例输入
9 1000 1 -1 0 -1 -1 -1 1 -2 1 1 5 4 4 4 1 1 0 -432 1 -3 1 2 -4 1 1 7 1
样例输出
1 NO 1 -1 -1/2 12*sqrt(3) 3/2+sqrt(5)/2 1+sqrt(2)/2 -7/2+3*sqrt(5)/2