0
点赞
收藏
分享

微信扫一扫

栈系列(洛谷刷题记录)

船长_Kevin 2022-02-02 阅读 60
c语言

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

相关推荐

0 条评论