设计一个二次方程计算器
输入描述:
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
输出描述:
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
链接:https://www.nowcoder.com/questionTerminal/071f1acaada4477f94193f8c0b9054f4来源:牛客网#include#include #include #include #include #include using namespace std;int cba[3],epos;char str[100]; void Read(int &co,int &eo,int &i){ if(str[i]==0) {eo=-1; return ;} int flag=0; if(str[i]=='=') {++i;} if(str[i]=='-') {++i;++flag;} if(str[i]=='+') ++i; if(i>epos) ++flag; if(str[i]=='x'){ co=1; if(str[i+1]=='^'){i+=2; eo=str[i]-'0'; ++i;} else {i++; eo=1;} } else{ co=0; while(str[i]>='0'&&str[i]<='9') {co=co*10+str[i]-'0'; ++i;} if(str[i]=='x'){ if(str[i+1]=='^'){i+=2; eo=str[i]-'0';++i;} else {i++; eo=1;} } else {eo=0;++i;} } if(flag%2){ co=0-co; }}int main(){ while(scanf("%s",str)==1){ for(int i=0;;++i){ if(str[i]==0)break; if(str[i]=='=') {epos=i; break;} } int co,eo,i=0; memset(cba,0,sizeof(cba)); while(1){ Read(co,eo,i); if(eo==-1) break; cba[eo]+=co; } int a=cba[2],b=cba[1],c=cba[0]; // printf("a:%d,b:%d,c:%d\n",a,b,c); double delta=b*b-4*a*c; if(delta<0) printf("No Solution\n"); else { double x1,x2; x1=(0-b-sqrt(delta))/(2*a); x2=(0-b+sqrt(delta))/(2*a); if(x1>x2) swap(x1,x2); printf("%.2f %.2f\n",x1,x2); } } return 0;}