#include <iostream>
#include <stack>
#include <string>
#include <climits>
using namespace std;
void doOp( const char & e, stack < int > & myS)
{
if ( myS.size ( ) == 2 )
{
cout << "Performing " << e<< endl;
int num1, num2, answ;
num2 = myS.top ( ) ;
myS.pop ( ) ;
num1 = myS.top ( ) ;
myS.pop ( ) ;
if ( e == '+' )
answ = num1 + num2;
else if ( e == '-' )
answ = num1 - num2;
else if ( e == '*' )
answ = num1 * num2;
else if ( e == '/' )
answ = num1 / num2;
else if ( e == '%' )
answ = num1 % num2;
else
cout << "\n Error- Invalid operator" << endl;
cout << "\n Calculating..." << endl << answ << endl;
myS.push ( answ) ;
}
else
cout << "\n Invalid stack size- too few, or too many" << endl;
}
int main( ) {
stack < int > calcStack;
string exp ;
char ans;
cout << "\n Do you want to use the calculator?" << endl;
cin >> ans;
while ( ans == 'y' && cin )
{
cin .ignore ( INT_MAX , '\n ' ) ;
cout << "\n Enter your exp" << endl;
getline ( cin , exp ) ;
cout << "Parsing: " << exp << endl;
for ( int i = 0 ; i < exp .size ( ) ; i++ )
{
if ( isspace ( exp [ i] ) )
{
}
else if ( isdigit ( exp [ i] ) )
{
int num = exp [ i] - '0' ;
calcStack.push ( num) ;
cout << "Pushed " << num<< endl;
}
else
doOp( exp [ i] , calcStack) ;
}
while ( ! calcStack.empty ( ) )
{
calcStack.pop ( ) ;
}
cout << "\n Do you want to use the calculator again?" << endl;
cin >> ans;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxjbGltaXRzPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBkb09wKGNvbnN0IGNoYXIgJiBlLCBzdGFjayA8aW50PiYgbXlTKQp7CglpZiAobXlTLnNpemUoKSA9PSAyKQoJewoJCWNvdXQgPDwgIlBlcmZvcm1pbmcgIjw8ZTw8ZW5kbDsgCiAgICAJaW50IG51bTEsIG51bTIsIGFuc3c7CiAgICAJbnVtMiA9IG15Uy50b3AoKTsKICAgIAlteVMucG9wKCk7CiAgICAJbnVtMSA9IG15Uy50b3AoKTsKICAgIAlteVMucG9wKCk7CiAgICAJaWYgKGUgPT0gJysnKQoJICAgICAgICBhbnN3ID0gbnVtMSArIG51bTI7CgkgICAgZWxzZSBpZiAoZSA9PSAnLScpCiAgICAgICAgCWFuc3cgPSBudW0xIC0gbnVtMjsKICAgIAllbHNlIGlmIChlID09ICcqJykKCSAgICAgICAgYW5zdyA9IG51bTEgKiBudW0yOwoJICAgIGVsc2UgaWYgKGUgPT0gJy8nKQogICAgICAgIAlhbnN3ID0gbnVtMSAvIG51bTI7CiAgICAJZWxzZSBpZiAoZSA9PSAnJScpCgkgICAgICAgIGFuc3cgPSBudW0xICUgbnVtMjsKCSAgICBlbHNlCiAgICAJICAgIGNvdXQgPDwgIlxuRXJyb3ItIEludmFsaWQgb3BlcmF0b3IiIDw8IGVuZGw7CgogICAgCWNvdXQgPDwgIlxuQ2FsY3VsYXRpbmcuLi4iIDw8IGVuZGwgPDwgYW5zdyA8PCBlbmRsOwogICAgCW15Uy5wdXNoKGFuc3cpOwoJfQoJZWxzZQogICAgCWNvdXQgPDwgIlxuSW52YWxpZCBzdGFjayBzaXplLSB0b28gZmV3LCBvciB0b28gbWFueSIgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CnN0YWNrIDxpbnQ+IGNhbGNTdGFjazsKc3RyaW5nIGV4cDsKY2hhciBhbnM7CmNvdXQgPDwgIlxuRG8geW91IHdhbnQgdG8gdXNlIHRoZSBjYWxjdWxhdG9yPyIgPDwgZW5kbDsKY2luID4+IGFuczsKd2hpbGUgKGFucyA9PSAneScgJiYgY2luKQp7CiAgICBjaW4uaWdub3JlIChJTlRfTUFYLCAnXG4nKTsKICAgIGNvdXQgPDwgIlxuRW50ZXIgeW91ciBleHAiIDw8IGVuZGw7CiAgICBnZXRsaW5lIChjaW4sIGV4cCk7IAogICAgY291dDw8ICJQYXJzaW5nOiAiPDxleHA8PGVuZGw7IAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHAuc2l6ZSgpOyBpKyspCiAgICB7CiAgICAgICAgaWYgKGlzc3BhY2UoZXhwW2ldKSkKICAgICAgICB7CgogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChpc2RpZ2l0KGV4cFtpXSkpCiAgICAgICAgewogICAgICAgICAgICBpbnQgbnVtID0gZXhwW2ldIC0gJzAnOwogICAgICAgICAgICBjYWxjU3RhY2sucHVzaChudW0pOwogICAgICAgICAgICBjb3V0IDw8ICJQdXNoZWQgIiA8PCBudW08PGVuZGw7IAogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIGRvT3AoZXhwW2ldLCBjYWxjU3RhY2spOwogICAgfQoKICAgIHdoaWxlICghY2FsY1N0YWNrLmVtcHR5KCkpCiAgICB7CiAgICAgICAgY2FsY1N0YWNrLnBvcCgpOwogICAgfQoKICAgIGNvdXQgPDwgIlxuRG8geW91IHdhbnQgdG8gdXNlIHRoZSBjYWxjdWxhdG9yIGFnYWluPyIgPDwgZW5kbDsKICAgIGNpbiA+PiBhbnM7Cn0KCnJldHVybiAwOwp9Cg==