-
题目描述:
-
对于一个不存在括号的表达式进行计算
-
输入:
-
存在多种数据,每组数据一行,表达式不存在空格
-
输出:
-
输出结果
-
样例输入:
-
6/2+3+3*4
-
样例输出:
-
18
-
-
这道题给的条件明显不足。有以下不足:没有交代运算符种类;操作数什么类型也没说;正负数也没交代。。
-
但我还是硬着头皮做了。还是用栈来做。
-
数字栈、操作符栈。注意这里操作数有多位,所以在出现数字时,要看后面的是不是还是数字,直到后面是操作符为止。
-
-
#include <iostream> #include <stack> using namespace std; stack <int>s_data; stack <char>s_signal; int priority(char c){ int pr = 0; switch(c){ case '#': pr = -1;break; case '+': case '-': pr = 1;break; case '*': case '/': pr = 2;break; } return pr; } void execution(){ int tempA,tempB,temp; char operation; tempB = s_data.top(); s_data.pop(); tempA = s_data.top(); s_data.pop(); operation = s_signal.top(); s_signal.pop(); if(operation == '*') temp = tempA * tempB; else if(operation == '/') temp = tempA / tempB; else if(operation == '+') temp = tempA + tempB; else if(operation == '-') temp = tempA - tempB; s_data.push(temp); } int main(){ string str; while(cin>>str){ while(!s_data.empty()) s_data.pop(); while(!s_signal.empty()) s_signal.pop(); s_signal.push('#'); int result = 0; for(int i=0;i<str.length();i++){ if(str[i]>='0' && str[i]<='9'){ int num = 0; int j = i; while(str[j]>='0' && str[j]<='9'){ num = num * 10 + (str[j] - '0'); j++; } s_data.push(num); i = j - 1; } else{ if(priority(str[i]) > priority(s_signal.top())){ s_signal.push(str[i]); } else{ do{ execution(); }while(priority(str[i]) <= priority(s_signal.top())); s_signal.push(str[i]); } } } while(s_signal.top()!='#'){ execution(); } result = s_data.top(); s_data.pop(); cout<<result<<endl; } return 0; }