语言:C语言 由于clion会自动加上return,所以有时候可能没写……
P1449
题目描述:
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
题解如下:
//
// Created by Lee on 2022/2/1.
//main16
//
//用数组模拟栈
#include <stdio.h>
long array[10000];
int p;//栈顶指针
int temp;//存临时数
char ch;
int main(){
while((ch=getchar())!='@'){
if(ch>='0'&&ch<='9'){
temp = temp * 10 + ch -'0';
}
else if(ch=='.'){
array[p++] = temp;
temp = 0;//一定要注意归零,否则下一次temp会用这一次的继续往上加
}
else if(ch=='+'){
int a = array[p-2];
int b = array[p-1];
p -= 2;
int c = a+b;
array[p++] = c;
}
else if(ch=='-'){
int a = array[p-2];
int b = array[p-1];
p -= 2;
int c = a-b;
array[p++] = c;
}
else if(ch=='*'){
int a = array[p-2];
int b = array[p-1];
p -= 2;
int c = a*b;
array[p++] = c;
}
else if(ch=='/'){
int a = array[p-2];
int b = array[p-1];
p -= 2;
float c = a/b;
array[p++] = c;
}
}
printf("%d",array[0]);
return 0;
}
本题需要注意的地方:
1. 数字不一定只有一位。需要根据 '.' 来判断一个数字到底有几位。
2. 栈顶指针 p 其实是指向栈顶元素的再上面一位,即array[p-1]才是栈顶元素。取数的时候需要注意。
3. 除法的运算结果向下取整。这一点题目好像没表述清楚,但是自己要注意,因为我之前用float错了。