該題是求三個數之間的加減乘除取餘,其實就是模擬計算器,下面給出用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;
}