描述
给定一个字符串描述的算术表达式,计算出结果值。
输入字符串长度不超过100,合法的字符包括”+, -, *, /, (, )”,”0-9”,字符串内容的合法性及表达式语法的合法性由做题者检查。本题目只涉及整型计算。
/*
功能: 对输入的字符串表达式进行求值计算,并输出结果。
输入:String inputString:表达式字符串
返回: int :正常返回true,失败返回false
*/
public static boolean calculate(String inputString)
{
/*在这里实现功能*/
return true;
}
获取计算结果(int型)
public static int getResult()
{
/在这里实现功能/
return 0;
}
知识点 栈
运行时间限制 10M
内存限制 128
输入
输入算术表达式
输出
计算出结果值
样例输入 400+5
样例输出 405 true
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<unordered_map>
#include<fstream>
#include<sstream>
#include<queue>
#include<stack>
#include<map>
#include<unordered_map>
using namespace std;
//先转换为后缀表达式
int main() {
string s;
vector<string> v,v_after;
stack<string> Stack1;
stack<int> Stack2;
while (cin>>s){
//先转换为后缀表达式
string tem,tem1;
for (int i = 0; i < s.size(); i++){
for (int j = i; j < s.size(); j++){
if (isdigit(s[j])){
tem += s[j];
}
else{
if (!tem.empty()){
v.push_back(tem);
tem.clear();
}
tem1 = s[j];
v.push_back(tem1);
}
i = j;
}
}
v.push_back(tem);
for (int i = 0; i < v.size(); i++){
if (isdigit(v[i][0])){
v_after.push_back(v[i]);
}
else{
if (Stack1.empty()||v[i]=="("){
Stack1.push(v[i]);
}
else{
if (v[i] == ")"){
while (!Stack1.empty() && Stack1.top() != "("){
tem = Stack1.top();
v_after.push_back(tem);
Stack1.pop();
}
Stack1.pop();
}
else if (v[i] == "+" || v[i] == "-"){
while (!Stack1.empty() && Stack1.top() != "("){
tem = Stack1.top();
v_after.push_back(tem);
Stack1.pop();
}
Stack1.push(v[i]);
}
else{
while (!Stack1.empty() && (Stack1.top() == "*" || Stack1.top() == "/")&&Stack1.top()!="("){
tem = Stack1.top();
v_after.push_back(tem);
Stack1.pop();
}
Stack1.push(v[i]);
}
}
}
}
while (!Stack1.empty()){
tem = Stack1.top();
v_after.push_back(tem);
Stack1.pop();
}
/*for (int i = 0; i < v_after.size(); i++)
cout << v_after[i] << endl;*/
//计算后缀表达式
int num;
int op1, op2;
for (int i = 0; i < v_after.size(); i++){
if (isdigit(v_after[i][0])){
num = stoi(v_after[i]);
Stack2.push(num);
}
else{
if (v_after[i] == "+"){
op2 = Stack2.top();
Stack2.pop();
op1 = Stack2.top();
Stack2.pop();
op1 = op1 + op2;
Stack2.push(op1);
}
else if (v_after[i] == "-"){
op2 = Stack2.top();
Stack2.pop();
op1 = Stack2.top();
Stack2.pop();
op1 = op1 - op2;
Stack2.push(op1);
}
else if (v_after[i] == "*"){
op2 = Stack2.top();
Stack2.pop();
op1 = Stack2.top();
Stack2.pop();
op1 = op1*op2;
Stack2.push(op1);
}
else{
op2 = Stack2.top();
Stack2.pop();
op1 = Stack2.top();
Stack2.pop();
op1 = op1/op2;
Stack2.push(op1);
}
}
}
v.clear();
v_after.clear();
cout << Stack2.top() << endl;
Stack2.pop();
}
return 0;
}