Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Sample Input
59*684/-3*+#
Sample Output
57
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define stacksize 100010
#define ok 1
#define true 1
#define fales 0
int flag;
char a[100010];
typedef int elemtype;
typedef int status;
typedef struct
{
elemtype date[10010];
int top;
} seqstack;
void initstack(seqstack *s)
{
(*s).top = 0;
}
status stackfull(seqstack s)
{
if(s.top == stacksize) return fales;
return true;
}
void push(seqstack *s, elemtype p)
{
if(!stackfull(*s))
{
printf("F\n");
}
else
{
(*s).date[(*s).top] = p;
(*s).top++;
}
}
status stackempty(seqstack s)
{
if(s.top == 0) return fales;
return true;
}
status pop(seqstack *s, elemtype *p)
{
if(!stackempty(*s)) return fales;
(*s).top--;
*p = (*s).date[(*s).top];
return true;
}
int fn(int x, int y, char c)
{
if(c=='+')return x+y;
if(c=='-')return x-y;
if(c=='*')return x*y;
return x/y;
}
int main()
{
int n, i, x, y, m, p;
gets(a);
n = strlen(a);
seqstack s;
initstack(&s);
for(i = 0; i < n; i++)
{
if(a[i] >= '0' && a[i] <= '9')
{
push(&s, a[i]-48);
}
if(a[i] == '+' || a[i] == '-' || a[i] == '*' || a[i] == '/')
{
pop(&s, &p);
x = p;
pop(&s, &p);
y = p;
m = fn(y, x, a[i]);
push(&s, m);
}
if(a[i] == '#')
{
break;
}
}
pop(&s, &p);
printf("%d\n", p);
return 0;
}
#include <iostream> #include<bits/stdc++.h> using namespace std; int main() { int len, i, sum, a, b, x; string s; stack<int> q; cin>>s; len = s.length(); for(i = 0; i < len; i++) { if(s[i] == '#') break; if(s[i] >= '0' && s[i] <= '9') { x = s[i] - '0'; q.push(x); } else { a = q.top(); q.pop(); b = q.top(); q.pop(); if(s[i] == '+') x = b+a; if(s[i] == '-') x = b-a; if(s[i] == '*') x = b*a; if(s[i] == '/') x = b/a; q.push(x); } } sum = q.top(); cout<<sum<<endl; }