80 和 70 分代码求助
查看原帖
80 和 70 分代码求助
392935
qzhwDGS楼主2021/8/27 20:46

Help!!!


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;
}

求大佬请教。。。

2021/8/27 20:46
加载中...