实现带括号加减乘除运算
来源:互联网 发布:php files 编辑:程序博客网 时间:2024/05/22 01:56
问题描述
输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
输入格式
输入一行,包含一个表达式。
输出格式
输出这个表达式的值。
样例输入
1-2+3*(4-5)
样例输出
-4
数据规模和约定
表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
#include <iostream>#include <stack>using namespace std;stack<char> a;stack<int> num;int bj(char a){ if(a == '+') return 1; if(a == '-') return 1; if(a == '*') return 2; if(a == '/') return 2; if(a == '(') return -1;}int int_pow(int x, int y){ int sum = 1; for(int i = 0; i < y; i++){ sum *= x; } return sum;}int change(string s){ int num = 0; for(int i = s.length() - 1, j = 0; i >= 0; i--, j++){ num += (s[i] - '0') * int_pow(10, j); } return num;}int act(int a, int b, char op){ int result; switch(op){ case '+':result = a + b; break; case '-':result = a - b; break; case '*':result = a * b; break; case '/':result = a / b; break; } return result;}int main(){ string s; cin>>s; s = s + '#'; char op; int fir, sco, result; for(int i = 0; i < s.length(); i++){ string s1 = ""; if(s[i] >= '0' && s[i] <= '9'){ while(s[i] >= '0' && s[i] <= '9'){ s1 += s[i]; i++; } int k = change(s1); num.push(k); i--; } else { if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '('){ if(a.empty()){ a.push(s[i]); } else { if(bj(a.top()) == -1 || bj(s[i]) == -1){ a.push(s[i]); } else if(bj(a.top()) < bj(s[i])){ a.push(s[i]); } else { op = a.top(); a.pop(); a.push(s[i]); sco = num.top(); num.pop(); fir = num.top(); num.pop(); result = act(fir, sco, op); num.push(result); } } } else { if(s[i] == ')'){ op = a.top(); a.pop(); if(a.top() == '('){ a.pop(); sco = num.top(); num.pop(); fir = num.top(); num.pop(); result = act(fir, sco, op); num.push(result); } else { while(a.top() != '('){ sco = num.top(); num.pop(); fir = num.top(); num.pop(); result = act(fir, sco, op); num.push(result); op = a.top(); a.pop(); } a.pop(); sco = num.top(); num.pop(); fir = num.top(); num.pop(); result = act(fir, sco, op); num.push(result); } } else { } } } } while(a.size() > 0){ op = a.top(); a.pop(); fir = num.top(); num.pop(); sco = num.top(); num.pop(); result = act(fir, sco, op); num.push(result); } result = num.top(); cout<<result<<endl; return 0;}
0 0
- 实现带括号加减乘除运算
- java 实现带括号的加减乘除四则运算
- 运用递归实现计算器加减乘除带括号优先级算法
- 对一个可进行带括号、加减乘除运算类的分析
- 带括号的加减乘除--非递规算法.(java.)
- 计蒜客 加减乘除 带括号(栈实现和二叉树两种实现)
- 位运算实现加减乘除
- 位运算实现加减乘除
- 位运算实现加减乘除
- 位运算实现加减乘除
- 位运算实现加减乘除
- 位运算实现加减乘除
- 位运算实现加减乘除
- 用栈的知识实现四则运算(带括号的加减乘除)
- 位运算实现加减乘除运算
- 双栈方式实现带括号的基本数学运算
- MFC 实现 加减乘除,括号,乘方的 计算器
- C++-----利用括号递归实现的加减乘除
- ARM进阶 002_1 ADS工程配置
- Spring与Struts整合
- java 技术:消息队列
- 棋盘覆盖问题
- 两种盒模型
- 实现带括号加减乘除运算
- nginx简介
- 区域内点的个数
- LDA-线性判别分析
- C++排序之数组,Vector,priority_queue
- WebView出现net::err_cache_miss错误
- 《ACM程序设计》书中题目Y
- 数乌龟
- 移动直播“三分天下” 花椒直播数据亮眼