解题思路:使用栈, 遇到数字入数字栈, 遇到操作符, 在操作符栈不为空,并且数字栈的长度大于等于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 人评分
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:916 |
假币问题 (C语言代码)浏览:2656 |
点我有惊喜!你懂得!浏览:1166 |
C语言训练-自守数问题 (C语言代码) long long浏览:1106 |
C语言程序设计教程(第三版)课后习题8.3 (Java代码)浏览:1402 |
C语言训练-最大数问题 (C语言代码)浏览:648 |
九宫重排 (C++代码)浏览:2195 |
拆分位数 (C语言代码)浏览:1361 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1267 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |