四则运算计算器

一个代码非常简陋的四则运算计算器。。

主要利用栈将中缀表达式转为后缀表达式,然后根据运算法则计算即可。因为数可能大于10,便利用了结构体存储不同数据类型。如有错误请指正。

  1 #include <iostream>
  2 #include <cstring>
  3 using namespace std;
  4 const int INF=2333333;
  5 struct node
  6 {
  7     long long num;
  8     char op;
  9 }a[1100000];
 10 char s[1100000],c[1100000];
 11 long long ans[1100000];
 12 int main(void)
 13 {
 14     int b=0;
 15     for(int i=1;i<=100000;i++)a[i].num=INF;
 16     cin>>s;
 17     int l=strlen(s),h=0,r=0;
 18     long long x=INF;
 19     for(int i=0;i<l;i++)
 20     {
 21         if(s[i]=='+'||s[i]=='-')
 22         {
 23             if(x!=INF)
 24             {
 25                 a[++h].num=x;
 26                 x=INF;
 27             }
 28             if(s[i]=='-'&&r&&c[r]!='(')b=1;
 29             while(r&&c[r]!='(')a[++h].op=c[r--];
 30             c[++r]=s[i];
 31         }
 32         else if(s[i]=='*'||s[i]=='/')
 33         {
 34             if(x!=INF)
 35             {
 36                 a[++h].num=x;
 37                 x=INF;
 38             }
 39             while(r&&c[r]!='('&&c[r]!='+'&&c[r]!='-')a[++h].op=c[r--];
 40             c[++r]=s[i];
 41         }
 42         else if(s[i]=='(')
 43         {
 44             c[++r]=s[i];
 45         }
 46         else if(s[i]==')')
 47         {
 48             if(c[r]=='-'&&!b)
 49             {
 50                 b=0;
 51                 a[++h].num=-x;
 52                 x=INF;
 53                 r-=2;
 54             }
 55             else
 56             {
 57                 if(x!=INF)
 58                 {
 59                     a[++h].num=x;
 60                     x=INF;
 61                 }
 62                 while(c[r]!='(')a[++h].op=c[r--];
 63                 r--;
 64             }
 65         }
 66         else
 67         {
 68             if(x==INF)x=s[i]-'0';
 69             else x=10*x+s[i]-'0';
 70         }
 71     }
 72     if(x!=INF)a[++h].num=x;
 73     while(r)a[++h].op=c[r--];
 74     int k=0;
 75     for(int i=1;i<=h;i++)
 76     {
 77         if(a[i].num!=INF)ans[++k]=a[i].num;
 78         else
 79         {
 80             if(a[i].op=='+')
 81             {
 82                 ans[k-1]=ans[k-1]+ans[k];
 83                 k--;
 84             }
 85             else if(a[i].op=='-')
 86             {
 87                 ans[k-1]=ans[k-1]-ans[k];
 88                 k--;
 89             }
 90             else if(a[i].op=='*')
 91             {
 92                 ans[k-1]=ans[k-1]*ans[k];
 93                 k--;
 94             }
 95             else if(a[i].op=='/')
 96             {
 97                 ans[k-1]=ans[k-1]/ans[k];
 98                 k--;
 99             }
100         }
101     }
102     cout<<ans[1]<<endl;
103     return 0;
104 }

 

posted @ 2020-09-26 11:09  yanying  阅读(277)  评论(0编辑  收藏  举报