#include #include #include using namespace std; #define FF(a,v,b) for(a=v;a SubExpr; void Push( TToken rhs ){ SubExpr.push_back( rhs ); } TToken Sum(void){ TToken TotSum; FF(i,0,SubExpr.size()) TotSum = TotSum + SubExpr[i]; return TotSum; } }; string StrExpr , SubExpr ; int eqPos , CurPos; void AddCfr( int & num , int cfr ){ num = num*10 + cfr; } void in(){ StrExpr.insert( 0 , "(" ); eqPos = StrExpr.find('='); StrExpr.insert( eqPos , ")" ); StrExpr.insert( eqPos+2 , "(" ); StrExpr.insert( StrExpr.end() , ')' ); } TToken ExprResult( ){ TExpr LocalExpr; TToken RekToken; int LastExpr=-1 , LastSign=INC , LastNum; int State=1; while(CurPos < SubExpr.length() && State>0){ if( SubExpr[CurPos] >='0' && SubExpr[CurPos] <='9' ){ LastNum=0; while( SubExpr[CurPos] >='0' && SubExpr[CurPos] <='9' ){ AddCfr( LastNum , SubExpr[CurPos]-'0' ); CurPos++; } CurPos--; LastExpr++; if( LastSign == INC ) LocalExpr.Push( TToken( LastNum , 0 ) ); else if( LastSign == DEC ) LocalExpr.Push( TToken( -LastNum , 0 ) ); else if( LastSign == MUL ){ LastExpr--; LocalExpr.SubExpr[LastExpr] = LocalExpr.SubExpr[LastExpr] * TToken( LastNum , 0 ); } } if( SubExpr[CurPos] == 'x' ){ LastExpr++; if( LastSign == INC ) LocalExpr.Push( TToken( 0 , 1 ) ); else if( LastSign == DEC ) LocalExpr.Push( TToken( 0 , -1 ) ); else if( LastSign == MUL ){ LastExpr--; LocalExpr.SubExpr[LastExpr] = LocalExpr.SubExpr[LastExpr] * TToken( 0 , 1 ); } } else if( SubExpr[CurPos] == '(' ){ CurPos++; RekToken = ExprResult(); CurPos--; if( LastSign == DEC ) RekToken = -RekToken; if( LastSign == MUL ) LocalExpr.SubExpr[LastExpr] = LocalExpr.SubExpr[LastExpr] * RekToken; else{ LastExpr++; LocalExpr.Push( RekToken ); } } else if( SubExpr[CurPos] == '-' ){ LastSign = DEC; } else if( SubExpr[CurPos] == '+' ){ LastSign = INC; } else if( SubExpr[CurPos] == '*' ){ LastSign = MUL; } else if( SubExpr[CurPos] == ')' ){ State--; } CurPos++; } return( LocalExpr.Sum() ); } int main() { int Equation = 1; while( getline(cin, StrExpr) ){ in(); SubExpr = StrExpr.substr( 0 , eqPos+1 ); CurPos = 1; TToken ERLEFT = ExprResult(); CurPos = eqPos + 2; SubExpr = StrExpr.substr( eqPos+2 , StrExpr.length() - eqPos - 1 ); CurPos = 1; TToken ERRIGHT = ExprResult(); int XCoef = ERLEFT.XCoef - ERRIGHT.XCoef; int FCoef = ERRIGHT.FCoef - ERLEFT.FCoef; printf("Equation #%d\n" , Equation++); if( XCoef == FCoef && XCoef==0 ) printf("Infinitely many solutions.\n\n"); else if( XCoef == 0 && FCoef != 0 ) printf("No solution.\n\n"); else printf("x = %.6lf\n\n" , double(FCoef)/double(XCoef)); } return 0; }