#include <cstdio>
#include <cstdlib>
#include <cstring>
#define Maxsize 2000
int S[Maxsize], top;
void push(int x) {
S[++top] = x;
}
int pop() {
top--;
return S[top + 1];
}
int main() {
int a, b;
char s[1000];
while (scanf("%s", s) != EOF) {
if (s[0] == '+') {
a = pop();
b = pop();
push(a + b);
}
else if (s[0] == '-') {
b = pop();
a = pop();
push(a - b);
}
else if (s[0] == '*') {
a = pop();
b = pop();
push(a * b);
}
else if (s[0] == '/') {
a = pop();
b = pop();
if (b == 0) {
printf("error");
exit(0);
}
push(a / b);
}
else {
push(atoi(s));
//atoi()是C语言标准库中的函数,用来将字符串的数字转换为整型数值
}
}
printf("%d\n", pop());
return 0;
}
我们也可以用C++中STL的stack来解该题。
#include <iostream>
#include <cstdlib>
#include <stack>
using namespace std;
int main() {
stack<int>S;
string s;
int a, b;
while (cin >> s) {
if (s[0] == '+') {
a = S.top(); S.pop();
b = S.top(); S.pop();
S.push(a + b);
}
else if (s[0] == '-') {
b = S.top(); S.pop();
a = S.top(); S.pop();
S.push(a - b);
}
else if (s[0] == '*') {
a = S.top(); S.pop();
b = S.top(); S.pop();
S.push(a * b);
}
else if (s[0] == '/') {
a = S.top(); S.pop();
b = S.top(); S.pop();
if (b == 0) {
printf("error!");
exit(0);
}
S.push(a / b);
}
else {
S.push(atoi(s.c_str()));
//atoi()是C语言标准库中的函数,用来将字符串的数字转换为整型数值
//c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.
//这是为了与c语言兼容,在c语言中没有string类型,
//故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
}
}
cout << S.top() << endl;
return 0;
}