#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==