题解:后缀表达式

P1449 后缀表达式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


//计算后缀表达式
//栈的经典应用
//先把数据依次压栈
//遇到运算符时
//让栈顶的两个元素出栈
//把他们的运算结果再次压栈
#include

int main()
{
	int top = 0;
	long long num = 0;
	long long stack[50];
	char str[51];
	scanf("%s", str);
	//遍历整个字符串,读到@结束
	for (int i = 0; str[i] != '@'; i++)
	{
		if (str[i] >= '0' && str[i] <= '9')
			num = num * 10 + str[i] - '0';
		else if (str[i] == '.')
		{
			stack[top++] = num;
			num = 0;
		}
		//读到操作符了
		else
		{
			int x, y;
			switch (str[i])
			{
			case '+':
				x = stack[--top];
				y = stack[--top];
				stack[top++] = y + x;
				break;
			case '-':
				x = stack[--top];
				y = stack[--top];
				//减法和除法有点反直觉
				stack[top++] = y - x;
				break;
			case '*':
				x = stack[--top];
				y = stack[--top];
				stack[top++] = y * x;
				break;
			case '/':
				x = stack[--top];
				y = stack[--top];
				//减法和除法有点反直觉
				stack[top++] = y / x;
				break;
			}
		}
	}
	//栈里最后一个元素即为计算结果
	printf("%d", stack[--top]);
	return 0;
}

你可能感兴趣的:(算法,c语言,数据结构)