zoukankan      html  css  js  c++  java
  • 四则运算计算器

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

    主要利用栈将中缀表达式转为后缀表达式,然后根据运算法则计算即可。因为数可能大于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 }
  • 相关阅读:
    SPA架构的优点和缺点以及一些思考
    我们为什么要尝试前后端分离
    HTTP协议详解
    前后端分离 与 不分离
    描述一下 cookies,sessionStorage 和 localStorage 的区别
    Express中间件的意思 next()的方法
    Java笔记1Java相关概念和如何实现跨平台
    去掉EditPlus自动备份bak文件
    Java配置环境变量
    Java初学者入门应该掌握的30个概念
  • 原文地址:https://www.cnblogs.com/yanying7/p/13734296.html
Copyright © 2011-2022 走看看