社区讨论

为什么第九个点WA了QWQ

P2378因式分解II参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi86hsae
此快照首次捕获于
2025/11/21 09:25
4 个月前
此快照最后确认于
2025/11/21 09:25
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define R register int
using namespace std;
char s[110];
int l,a,b,c,d,x1,x2;
inline int dq(int l,int r){int su=0,f=1;if (s[l]=='-') f=-1,l++;if (s[l]=='+') l++;for (R i=l;i<=r;i++) su=su*10+s[i]-'0';return max(su,1)*f;}//取出各项的系数
int main(){
	scanf("%s",s+1);
	l=strlen(s+1);
	int aa=-1,bb=-1;//"x^2"与'x'的位置
	for (R i=1;i<=l;i++){if (s[i]=='x'&&s[i+1]=='^'&&s[i+2]=='2') aa=i-1;else if (s[i]=='x') bb=i-1;}
	//cout<<aa<<" "<<bb<<" "<<l<<endl;
	a=dq(1,aa);
	if (bb!=-1){b=dq(aa+4,bb);if (bb+1!=l) c=dq(bb+2,l);}
	else if (aa+3!=l) c=dq(aa+4,l);
	d=b*b-4*a*c;//d为判别式
	//printf("%d %d %d %d\n",a,b,c,d);
	x1=(-1)*(b+sqrt(d))/(2*a);//第一个根
	x2=(b*(-1)+sqrt(d))/(2*a);//第二个根
	x1*=-1;x2*=-1;//因为是(x-x1)(x-x2)
	//cout<<x1<<" "<<x2<<endl;
	if (x1==0) printf("x");
	else{if (x1>0) printf("(x+%d)",x1);else printf("(x-%d)",abs(x1));}
	if (!d){printf("^2");return 0;}
	if (x2==0){printf("x");return 0;}
	if (x2>0) printf("(x+%d)",x2);
	else printf("(x-%d)",abs(x2));
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...