社区讨论
为什么第九个点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 条回复,欢迎继续交流。
正在加载回复...