标签:turn color 转换 结果 using 区分 操作 c++ post
#include <iostream> #include <stack> using namespace std; int cal(int a,int b,char c){ if(c==‘+‘) return a+b; else if(c==‘-‘) return a-b; else if(c==‘*‘) return a*b; else if(c==‘/‘) return a/b; else return 0; } int postcal(char* post){ stack <int > s; while(*post){ if(*post >=‘0‘&& *post<=‘9‘){ s.push(*post); } else{ int a = s.top()-48; s.pop(); int b = s.top()-48; s.pop(); int c = cal(b,a,*post); s.push(c+48); } post++; } return s.top()-48; } int main(int argc, const char * argv[]) { char* post = new char; cin>>post; int res = postcal(post); cout<<"答案是:"<<res<<endl; return 0; }
求解思想:
从左到右扫描输入的后缀表达式,若是数字则入栈;若是操作符,则从栈中取出两个数,进行相应计算后,将结果放回栈中,;扫描完后,栈顶剩余元素就是结果。
由于输入时并未区分数字和操作符,而是统一规定成了char 类型,所以要将每两个操作数计算的结果也要转换成ASCII码对应的字符类型,所以要进行+-48的操作。
也可以在一开始读取输入的时候就区分int类型和char类型,然后分开设栈。
标签:turn color 转换 结果 using 区分 操作 c++ post
原文地址:http://www.cnblogs.com/whalelife/p/7427050.html