首页 > 试题广场 > 牛牛与后缀表达式
[编程题]牛牛与后缀表达式
  • 热度指数:41 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。
其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。
本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过
示例1

输入

"1#1#+"

输出

2

说明

1#1#+这个后缀表达式表示的式子是1+1,结果为2
示例2

输入

"12#3#+15#*"

输出

225

说明

12#3#+15#*这个后缀表达式表示的式子是(12+3)*15,结果为225

备注:


可能比较简洁的版本
long long legalExp(string str) {
	stack<long long> operand;
	long long a=0;
	for(int i=0;i<str.length();i++) {
		if(str[i]>='0'&&str[i]<='9')
			a=a*10+str[i]-'0';
		switch(str[i]) {
			case '#' :
				if(str[i+1]>='0'&&str[i+1]<='9') {
					operand.push(a);
					a=0;
				}
				break;
			case '+': a=operand.top()+a; break;
			case '-': a=operand.top()-a; break;
			case '*': a=operand.top()*a; break;
			default: break;
		}
		if(str[i]=='+'||str[i]=='-'||str[i]=='*') {
			operand.pop();
			if(i+1<str.length()&&str[i+1]>='0'&&str[i+1]<='9') {
				operand.push(a);
				a=0;
			}
		}
	}
	return a;
}


发表于 2021-02-07 14:32:27 回复(0)
这个也太简单了,是不是考验代码优不优美。用std::string,用find获取两个#位置,其他直接计算即可。
发表于 2021-01-22 18:50:32 回复(0)