语言: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;
}