OJ_1103 二次方程计算器

来源:互联网 发布:双赢物流软件下载 编辑:程序博客网 时间:2024/05/20 18:00
#include <iostream>#include <string>#include <math.h>#include <iomanip>#include <stack>using namespace std;int getnum(string s,int &i){    int sum=0;    while(s[i]>='0'&&s[i]<='9')    {                               sum=sum*10+s[i]-'0';                               i++;    }    return sum;}void func(){     string s;     while(cin>>s)     {                  int flag=1;                  int a,b,c;                  a=b=c=0;                  stack<int> st;                  for(int i=0;i<s.size();)                  {                          if(s[i]>='0'&&s[i]<='9')// 数字先存下来                           {                                                  int t=getnum(s,i);                                                  st.push(flag*t);                          }else                          if(s[i]=='x'&&s[i+1]=='^')// 二次项                           {                                                       // 系数没有数字,即为1的情况                                                     if(s[i-1]<'0'||s[i-1]>'9')                                                    {                                                                              st.push(flag);                                                    }                                                    int t=st.top();                                                    st.pop();                                                    a+=t;                                                    i++;//^                                                    i++;//2                                                    i++;// 下一个符号                           }else                          if(s[i]=='x'&&s[i+1]!='^')// 一次项                          {                                                          // 系数没有数字,即为1的情况                                                     if(s[i-1]<'0'||s[i-1]>'9')                                                    {                                                                              st.push(flag);                                                    }                                                    int t=st.top();                                                    st.pop();                                                    b+=t;                                                    i++;// 下一个符号                           }else                          if(s[i]=='+')                          {                                       flag=1;                                       i++;                          }else                          if(s[i]=='-')                          {                                       flag=-1;                                       i++;                          } else                          if(s[i]=='=')                          {                                       int tmp=0;                                       while(!st.empty())                                      {                                                 tmp+=st.top();                                                 st.pop();                                             }                                      c+=tmp;                                       a=0-a;                                       b=0-b;                                       c=0-c;                                       i++;                          }                                                                      }                 int tmp=0;                 while(!st.empty())                 {                            tmp+=st.top();                            st.pop();                        }                 c+=tmp;                                  if(a<0)                 {                                       a=0-a;                                       b=0-b;                                       c=0-c;                                  }                                  double x1,x2;                 double delta=b*b-4*a*c;                 if(delta<0)                 cout<<"No Solution"<<endl;                 else{                                                       x1=((-1)*(double)b-sqrt(delta))/a/2;                 x2=((-1)*(double)b+sqrt(delta))/a/2;                 cout.setf(ios::fixed);                 cout.precision(2);                 cout<<x1<<" "<<x2<<endl;                 }                                                                                                   }}int main(int argc, char *argv[]){    //printf("Hello, world\n");func();return 0;}

使用栈,同时要注意一些表达式上的细节

1.=号左右两边的问题

2.没有系数的情况实际上是系数为1


题目描述:

设计一个二次方程计算器

输入:

每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。

输出:

每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。

样例输入:
x^2+x=3x+4
样例输出:
-1.24 3.24

0 0
原创粉丝点击