ZOJ 3778 Talented Chef(计算器模拟)

来源:互联网 发布:andrew marc牌子知乎 编辑:程序博客网 时间:2024/04/30 15:23

题目链接

该题是求三个数之间的加减乘除取余,其实就是模拟计算器,下面给出用stack容器写的普遍通用的代码:

#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<iostream>#include<algorithm>#include<vector>#include<map>#include<queue>#include<stack>#define pii pair<int, int>using namespace std;typedef long long ll;char s[1000];int main(){int t = 0;scanf("%d%*c", &t);while(t--){stack<char>s1;stack<int>s2;int a, b;char c;gets(s);for(int i = 0; s[i]; i++){if(s[i] >= '0' && s[i] <= '9')              {                  a = 0;                  while(s[i] >= '0' && s[i] <= '9')                  {                      a = a * 10 + s[i] - '0';                      i++;                  }                  i--;                  s2.push(a);              } else if(s[i] == '-' || s[i] == '+')              {                  if(!s1.empty())                  {                      c = s1.top();                      s1.pop();                      a = s2.top();                      s2.pop();                      b = s2.top();                      s2.pop();                      if(c=='+')                          a += b;                      else                          a = b-a;                      s2.push(a);                      s1.push(s[i]);                  }                  else                      s1.push(s[i]);              } else if(s[i] == '/' || s[i] == '*' || s[i] == '%')              {                  char cnt = s[i];                  b = 0;                  i += 2;                  while(s[i] >= '0' && s[i] <= '9')                  {                      b = b * 10 + s[i]-'0';                      i++;                  }                  i--;                  a = s2.top();                  s2.pop();                  if(cnt == '/')                      a = a / b;                  else if(cnt == '*')                      a = a * b;                  else if(cnt == '%')                      a = a % b;                  s2.push(a);              }    }while(!s1.empty())          {              c = s1.top();              s1.pop();              a = s2.top();              s2.pop();              b = s2.top();              s2.pop();              if(c == '+')                  a += b;              else                  a = b - a;              s2.push(a);          }          printf("%d\n", s2.top()); }return 0;}


0 0
原创粉丝点击