解题思路:使用栈, 遇到数字入数字栈, 遇到操作符, 在操作符栈不为空,并且数字栈的长度大于等于2时,出栈计算,结果入栈
注意事项: 最后在操作符不为空时,循环出栈计算
参考代码:
#include<iostream> #include<cstring> #include<cstdlib> #include<stack> using namespace std; stack<double> stk_num; stack<char> stk_op; double cal(double a, double b,char c){ switch(c){ case '*': return a * b; case '/': return a / b; case '+': return a + b; case '-': return a - b; } } int main() { char str[20],c,ch; double a, b; while(cin >> str){ switch (str[0]){ case '*': case '+': case '-': case '/': while(!stk_op.empty() && stk_num.size() >= 2) { c = stk_op.top(); stk_op.pop(); b = stk_num.top(); stk_num.pop(); a = stk_num.top(); stk_num.pop(); stk_num.push(cal(a,b,c)); } stk_op.push(str[0]); break; default: double num = atof(str); stk_num.push(num); } if((ch = cin.get()) == '\n') break; } while(!stk_op.empty()){ c = stk_op.top(); stk_op.pop(); b = stk_num.top(); stk_num.pop(); a = stk_num.top(); stk_num.pop(); stk_num.push(cal(a,b,c)); } printf("%f", stk_num.top()); return 0; }
0.0分
1 人评分
点我有惊喜!你懂得!浏览:1435 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:533 |
A+B for Input-Output Practice (VI) (C++代码)浏览:417 |
【数组的距离】 (C语言代码)浏览:738 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:946 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:862 |
1113题解浏览:789 |
K-进制数 (C语言描述,蓝桥杯)浏览:925 |
愚蠢的摄影师 (C++代码)浏览:938 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:576 |