80 分代码:
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
char c[1500];
long long o=0,z=0; // o是一次项系数 , z是常数项
long long u,v;
long long j;
long long ggg=0;
char c0;
int n;
int main()
{
gets(c);
n=strlen(c);
for(long long i=0;i<n;i++) // 模拟
{
if(c[i]=='+' || c[i]=='-')
{
c0=c[i];
i++;
while(c[i]>='0' && c[i]<='9')
{
ggg*=10;
ggg+=c[i]-'0';
i++;
}
if(c[i]=='x')
{
if(ggg!=0)
{
if(c0=='+')
o+=ggg;
else o-=ggg;
}
else if(ggg==0)
{
if(c0=='+')
o+=1;
else o-=1;
}
}
else
{
if(c0=='+')
z+=ggg;
else
z-=ggg;
}
}
ggg=0;
}
u=-1*int(int(-1*o+int(sqrt(int(pow(o,2))-4*1*z)))/2); // 求根公式
v=-1*int(int(-1*o-int(sqrt(int(pow(o,2))-4*1*z)))/2);
/*输出*/
if(u>v)
{
if(u==0) printf("x(x%d)",v);
if(u<0) printf("(x%d)(x%d)",u,v);
if(u>0)
{
printf("(x+%d)",u);
if(v==0) printf("x");
if(v>0) printf("(x+%d)",v);
if(v<0) printf("(x%d)",v);
}
}
if(u==v)
{
if(u<0) printf("(x%d)^2",u);
if(u==0) printf("x^2");
if(u>0) printf("(x+%d)^2",u);
}
if(u<v)
{
if(v==0) printf("x(x%d)",u);
if(v<0) printf("(x%d)(x%d)",v,u);
if(v>0)
{
printf("(x+%d)",v);
if(u==0) printf("x");
if(u>0) printf("(x+%d)",u);
if(u<0) printf("(x%d)",u);
}
}
return 0;
}
70 分代码:
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
char c[200];
long long o=0,z=0;
long long u,v;
long long j;
long long ggg=0;
char c0;
int y=0;
long long m;
int main()
{
cin>>c;
int n=strlen(c);
for(register long long i=0;i<n;i++)
{
if(c[i]=='+' || c[i]=='-')
{
c0=c[i];
i++;
while(c[i]>='0' && c[i]<='9')
{
ggg*=10;
ggg+=c[i]-'0';
i++;
}
if(c[i]=='x')
{
if(ggg!=0)
{
if(c0=='+')
o+=ggg;
else o-=ggg;
}
else if(ggg==0)
{
if(c0=='+')
o+=1;
else o-=1;
}
}
else
{
if(c0=='+')
z+=ggg;
else
z-=ggg;
}
}
ggg=0;
}
if(o==0) //平方差公式
{
printf("(x+%d)(x-%d)",int(sqrt(abs(z))),int(sqrt(abs(z))));
return 0;
}
/*模拟十字相乘*/
m=abs(z);
for(register long long i=1;i<=abs(z);i++)
{
if(m%i==0)
{
j=z/i;
if(abs(j+i)==abs(o))
{
if(j+i==o)
{
u=i;
v=j;
break;
}
else if(-1*(i+j)==o)
{
u=-1*i;
v=-1*j;
break;
}
}
}
}
//输出
if(u>v)
{
if(u==0) printf("x(x%d)",v);
if(u<0) printf("(x%d)(x%d)",u,v);
if(u>0)
{
printf("(x+%d)",u);
if(v==0) printf("x");
if(v>0) printf("(x+%d)",v);
if(v<0) printf("(x%d)",v);
}
}
if(u==v)
{
if(u<0) printf("(x%d)^2",u);
if(u==0) printf("x^2");
if(u>0) printf("(x+%d)^2",u);
}
if(u<v)
{
if(v==0) printf("x(x%d)",u);
if(v<0) printf("(x%d)(x%d)",v,u);
if(v>0)
{
printf("(x+%d)",v);
if(u==0) printf("x");
if(u>0) printf("(x+%d)",u);
if(u<0) printf("(x%d)",u);
}
}
return 0;
}
求大佬请教。。。