标签:int 入栈 运算 ios 注意 == pac color stream
//编译程序一般使用后缀表达式求解表达式的值(RPN或者逆波兰记号)
//计算后缀表达式的过程为:扫描,如果该项是操作数,压栈;如果是操作符,则从栈中退出两个操作数(先退出的是右操作
//数),进行运算,并将运算结果重新压入栈中,扫描完后栈顶存放的就是计算结果。
//注意的地方:是否支持2位以上的操作数!
//操作数之间也肯定是有分割符的;
//比如:12 34 56 * +
//如果是123456*+,不管是人还是计算机,都是没法做的;
1 #include<iostream> 2 #include<stack> 3 #include<stdlib.h>//atoi()函数 4 using namespace std; 5 int main(){//能计算99位操作数,且输入的各项要有分隔符 eg:1 2 + 3 4 - * # 6 char s[100];//操作数或者操作符 7 stack<int>z;//操作数栈 8 int a,b;//操作数 9 while(cin>>s&&s[0]!=‘#‘){ 10 // while(cin>>s&&s!="#"){//不能用,想一想为什么!!! 11 if(s[0]==‘+‘){//加法,s[0]用的很妙!同理不能用s=="+",想一想为什么!!! 12 b=z.top(); 13 z.pop(); 14 a=z.top(); 15 z.pop(); 16 z.push(a+b); 17 } 18 else if(s[0]==‘-‘){//减法 19 b=z.top(); 20 z.pop(); 21 a=z.top(); 22 z.pop(); 23 z.push(a-b); 24 } 25 else if(s[0]==‘*‘){//乘法 26 b=z.top(); 27 z.pop(); 28 a=z.top(); 29 z.pop(); 30 z.push(a*b); 31 } 32 else if(s[0]==‘/‘){//除法 33 b=z.top(); 34 z.pop(); 35 a=z.top(); 36 z.pop(); 37 z.push(a/b); 38 } 39 else z.push(atoi(s));//操作数 40 } 41 cout<<z.top();//扫描完后栈顶存放的就是计算结果 42 return 0; 43 }
标签:int 入栈 运算 ios 注意 == pac color stream
原文地址:https://www.cnblogs.com/TYXmax/p/10987940.html