1 条题解
-
0
C :
#include<stdio.h> #include<string.h> #include<ctype.h> #include<assert.h> #include<math.h> char str[128]; int c[4]; int main() { int sign=1,i,r,p,sign1=1,f; while(scanf("%s",str)!=EOF) { memset(c,0,sizeof(c)); for(f=i=r=p=0;str[i];i++) { if (str[i]=='=') { if (p && r==0) r=1; c[p]+=sign*sign1*r; sign1=-1; r=p=f=0,sign=1; } else if (str[i]=='^') { p=str[i+1]-'0'; i++; } else if (str[i]=='+') { c[p]+=sign*sign1*r; sign=1,r=p=f=0; } else if (str[i]=='-') { c[p]+=sign*sign1*r; sign=1,r=p=f=0; } else if (str[i]=='x' || str[i]=='X') { if (!f) r=1; p=1;//p表示次数。有x至少次数为1,之后若再扫描到^则p变为2.若为常数项,p为初始值0,不变。 } else if (isdigit(str[i])) { r=r*10+str[i]-'0';//r表示x之前的系数。 f=1;//f用来表示x之前是否存在系数(flag)。返回上两行,if (!f),说明f为初始值0,故强制赋系数1. } } if (f) c[p]+=sign*sign1*r; assert(c[2]!=0); if (c[1]*c[1]>=4*c[0]*c[2]) { double d=sqrt(1.0*(c[1]*c[1]-4*c[0]*c[2])); printf("%.2lf %.2lf\n",(-c[1]-d)/2/c[2]+1e-6,(-c[1]+d)/2/c[2]+1e-6); } else puts("No Solution"); } return 0; }
C++ :
#include<stdio.h> #include<string.h> #include<ctype.h> #include<assert.h> #include<math.h> char str[128]; int c[4]; int main() { int sign=1,i,r,p,sign1=1,f; while(scanf("%s",str)!=EOF) { memset(c,0,sizeof(c)); for(f=i=r=p=0;str[i];i++) { if (str[i]=='=') { if (p && r==0) r=1; c[p]+=sign*sign1*r; sign1=-1; r=p=f=0,sign=1; } else if (str[i]=='^') { p=str[i+1]-'0'; i++; } else if (str[i]=='+') { c[p]+=sign*sign1*r; sign=1,r=p=f=0; } else if (str[i]=='-') { c[p]+=sign*sign1*r; sign=1,r=p=f=0; } else if (str[i]=='x' || str[i]=='X') { if (!f) r=1; p=1; } else if (isdigit(str[i])) { r=r*10+str[i]-'0'; f=1; } } if (f) c[p]+=sign*sign1*r; assert(c[2]!=0); if (c[1]*c[1]>=4*c[0]*c[2]) { double d=sqrt(c[1]*c[1]-4*c[0]*c[2]); printf("%.2lf %.2lf\n",(-c[1]-d)/2/c[2]+1e-6,(-c[1]+d)/2/c[2]+1e-6); } else puts("No Solution"); } return 0; }
- 1
信息
- ID
- 1726
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者