#include <iostream>
#include <stack>
typedef std::stack<int> stack_type;
stack_type get_values(std::istream&);
int evaluate(stack_type&, std::istream&);
int main()
{
std::cout << "Enter your postfix expression:\n> ";
stack_type s = get_values(std::cin); // leaves the operation tokens in the input stream.
std::cout << evaluate(s, std::cin) << '\n';
}
int evaluate(stack_type& s, std::istream& op_stream)
{
while (s.size() > 1)
{
int a = s.top();
s.pop();
int b = s.top();
s.pop();
char op;
op_stream >> op;
int result;
switch (op)
{
case '+': result = a + b; break;
}
s.push(result);
}
return s.top();
}
stack_type get_values(std::istream& val_stream)
{
stack_type stack;
for (unsigned i=0; i<3; ++i)
{
int value ;
val_stream >> value ;
stack.push(value) ;
}
return stack;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+Cgp0eXBlZGVmIHN0ZDo6c3RhY2s8aW50PiBzdGFja190eXBlOwoKc3RhY2tfdHlwZSBnZXRfdmFsdWVzKHN0ZDo6aXN0cmVhbSYpOwppbnQgZXZhbHVhdGUoc3RhY2tfdHlwZSYsIHN0ZDo6aXN0cmVhbSYpOwoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmNvdXQgPDwgIkVudGVyIHlvdXIgcG9zdGZpeCBleHByZXNzaW9uOlxuPiAiOwogICAgc3RhY2tfdHlwZSBzID0gZ2V0X3ZhbHVlcyhzdGQ6OmNpbik7ICAgIC8vIGxlYXZlcyB0aGUgb3BlcmF0aW9uIHRva2VucyBpbiB0aGUgaW5wdXQgc3RyZWFtLgogICAgc3RkOjpjb3V0IDw8IGV2YWx1YXRlKHMsIHN0ZDo6Y2luKSA8PCAnXG4nOwp9CgppbnQgZXZhbHVhdGUoc3RhY2tfdHlwZSYgcywgc3RkOjppc3RyZWFtJiBvcF9zdHJlYW0pCnsKICAgIHdoaWxlIChzLnNpemUoKSA+IDEpCiAgICB7CiAgICAgICAgaW50IGEgPSBzLnRvcCgpOwogICAgICAgIHMucG9wKCk7CgogICAgICAgIGludCBiID0gcy50b3AoKTsKICAgICAgICBzLnBvcCgpOwoKICAgICAgICBjaGFyIG9wOwogICAgICAgIG9wX3N0cmVhbSA+PiBvcDsKCiAgICAgICAgaW50IHJlc3VsdDsKICAgICAgICBzd2l0Y2ggKG9wKQogICAgICAgIHsKICAgICAgICBjYXNlICcrJzogcmVzdWx0ID0gYSArIGI7IGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgcy5wdXNoKHJlc3VsdCk7CiAgICB9CgogICAgcmV0dXJuIHMudG9wKCk7Cn0KCnN0YWNrX3R5cGUgZ2V0X3ZhbHVlcyhzdGQ6OmlzdHJlYW0mIHZhbF9zdHJlYW0pCnsKICAgIHN0YWNrX3R5cGUgc3RhY2s7CgogICAgZm9yICh1bnNpZ25lZCBpPTA7IGk8MzsgKytpKQogICAgewogICAgCWludCB2YWx1ZSA7CiAgICAJdmFsX3N0cmVhbSA+PiB2YWx1ZSA7CiAgICAJc3RhY2sucHVzaCh2YWx1ZSkgOwogICAgfQoKICAgIHJldHVybiBzdGFjazsKfQo=