#include <bits/stdc++.h> using namespace std; bool isNum(char ch){ // 判断字符是否为数字 if('0'<=ch&&ch<='9') return true; return false; } void getNums(string str, int &a, int &b, int &c){ // 根据字符串str得到各项系数abc int len=str.length(); int curNum=0,sign=1; // sign默认正数,读到加减号后更新 for(int i=0;i<=len;i++){ if(isNum(str[i])){ // case 1:遇到数字 curNum=curNum*10+(str[i]-'0'); // 注意str[i]为char类型。。。 } else if(str[i]=='x'){ // case 2:遇到 x,说明a或b已确定 if(i==0) curNum=1; // case 2.1 获得首字符的系数1 else if((!isNum(str[i-1]))||str[i-2]=='^'){ // case 2.2 获得中间字符的系数1 curNum=1; } if(str[i+1]=='^'){ // 判断系数属于a还是b a=sign*curNum; curNum=0; i=i+2; // 始终保持 i 的下一位为待处理的字符 } else{ b=sign*curNum; curNum=0; } } else if(str[i]=='+'||str[i]=='-'){ // case 3:遇到加减号 if(isNum(str[i-1])){ // 若算符前一位是数字,需要判断是否为常数c if(!(i>=2&&str[i-2]=='^')){ // 只有一种情况(x^2)不是常数c,排除它 c=sign*curNum; curNum=0; } } if(str[i]=='+') sign=1; // 常数确定后,再更新系数的正负号 else if(str[i]=='-') sign=-1; } else if(str[i]==NULL){ // case 4: 处理到末尾,需要判断串尾是否为常数c if(isNum(str[i-1])&&str[i-2]!='^'){ // 最后一位为数字且不是x^2时,为常数c c=sign*curNum; curNum=0; } } } // cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl; // test } void calFun(int a, int b, int c){ // 输入二次方程,默认 a!=0 double delta=b*b-4*a*c; if(delta<0) cout<<"No Solution"<<endl; else{ double x1,x2; x1=(-b-sqrt(delta))/(2*a); x2=(-b+sqrt(delta))/(2*a); printf("%.2f %.2f",x1,x2); } } int main() { string str; while(cin>>str){ string leftStr,rightStr; int al=0,bl=0,cl=0,ar=0,br=0,cr=0; // 系数分为两部分 int i; for(i=0;str[i]!='=';i++) leftStr+=str[i]; // 出循环时,i指向'=' for(i=i+1;str[i]!=NULL;i++) rightStr+=str[i]; getNums(leftStr,al,bl,cl); // 分别得到两侧表达式的系数 getNums(rightStr,ar,br,cr); int a=al-ar,b=bl-br,c=cl-cr; // 移项 calFun(a,b,c); } return 0; }