很方,不包括括号的计算器都做不出,只能借鉴学长们的思路,感觉小脑袋瓜还不够机灵!!!
题目:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
要求:测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
思路:主要是区分乘除法的优先级,一开始想着数字运算符分开算,但无法实施!学长们的思路挺好,建立个数栈,依次放入,若遇到乘除只要将栈顶与这个数想乘除在放入就可以了!!!
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<set> #include<vector> #include<stack> #include<queue> #include<algorithm> using namespace std; int main() { double a,b,sum; char c; while(cin>>a) { sum=0; stack <double >s; c=getchar(); s.push(a); if(a==0&&c==' ') break; c=getchar(); getchar(); while(cin>>b) { switch(c) { case '*': a=s.top(); s.pop(); s.push(a*b); break; case '/': a=s.top(); s.pop(); s.push(a/b); break; case '+': s.push(b); break; case '-': s.push(-b); break; } c=getchar(); if(c==' ') break; c=getchar(); getchar(); } while(!s.empty()) { sum+=s.top(); s.pop(); } printf("%.2f ",sum); } return 0; }