描述
请实现如下接口
/* 功能:四则运算
* 输入:strExpression:字符串格式的算术表达式,如: “3+2*{1+2*[-4/(8-6)+7]}”
* 返回:算术表达式的计算结果
*/
public static int calculate(String strExpression)
{
/* 请实现*/
return 0;
}
约束:
pucExpression字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。
pucExpression算术表达式的有效性由调用者保证;
知识点 栈
运行时间限制 10M
内存限制 128
输入
输入一个算术表达式
输出
得到计算结果
样例输入 3+2*{1+2*[-4/(8-6)+7]}
样例输出 25
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <cctype>
using namespace std;
unsigned int i = 0;
char str[100];
int T();
int E1(int);
int T2();
int E2(int);
int E(){
int anst = T();
return E1(anst);
}
int T()
{
int preresult = T2();
return E2(preresult);
}
int E1(int preresult){ //加减计算
int ans = preresult;
if(i < strlen(str)){
if(str[i] == '+'){
i++;
int nextNum = T();
preresult = preresult+nextNum;
ans = E1(preresult); //连加、减的情况
}
else if(str[i] == '-'){
i++;
int nextNum = T();
preresult = preresult-nextNum;
ans = E1(preresult);
}
}
return ans;
}
int E2(int preresult){ //乘除计算
int ans = preresult;
if(i < strlen(str)){
if(str[i] == '*'){
i++;
int nextNum = T2();
preresult = preresult*nextNum;
ans = E2(preresult); //连乘、除的情况
}
else if(str[i] == '/'){
i++;
int nextNum = T2();
preresult = preresult/nextNum;
ans = E2(preresult);
}
}
return ans;
}
int T2(){
int res = 0;
int sign = 1; //正负号
if(i < strlen(str)){
if(str[i] == '-'){
sign = -1;
i++;
}
if(isalnum(str[i])){
while(i < strlen(str) && isalnum(str[i])){
res = res*10 + (str[i] - '0');
i++;
}
res = res*sign;
}
else if(str[i] == '(' || str[i] == '[' || str[i] == '{'){
char bracket = str[i];
i++;
res = E();
if(i < strlen(str)){
if((bracket == '(' && str[i] == ')') ||
(bracket == '[' && str[i] == ']') ||
(bracket == '{' && str[i] == '}'))
i++;
}
}
}
return res;
}
int main(){
i = 0;
while(cin >> str){
int res = E();
cout << res << endl;
}
return 0;
}