【4.6日题解】——后缀表达式(c代码表述)

简介: 【4.6日题解】——后缀表达式(c代码表述)

今天就是一个模板题,其实就是用栈来进行后缀表达式的求解,很简单。

4.6日每日一题——后缀表达式


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)

⏳全文大约阅读时间: 20min


全文目录

☘前言☘

解题思路1

📑写在最后

P1449 后缀表达式


解题思路1

读入元素,然后按照栈的思路求解就好了


#include <stdio.h>
#include <string.h>
#include <ctype.h>
char s[1001];
int stack[1001];
int main(){
    int stacktop = -1;
    while(fgets(s, 1000,stdin)){
        int len = strlen(s),ans = 0,i;
        char *start = s,*end = s;
        for(i = 0;i < 2;++i){//拿到前两个数字进栈
            int tmp = 0;
            while(isdigit(*end))    tmp *= 10,tmp += (*end - '0') ,end++;
            stack[++stacktop] = tmp,end++,start = end;
        }
        while(stacktop != -1){
            if(isdigit(*start)){
                int tmp = 0;
                while(isdigit(*end))    tmp *= 10,tmp += (*end - '0') ,end++;
                stack[++stacktop] = tmp,end++,start = end;
            }
            else if(*start == '+'){
                stack[stacktop - 1] += stack[stacktop];
                --stacktop,start++,end = start;
            }
            else if(*start == '-'){
                stack[stacktop - 1] -= stack[stacktop];
                --stacktop,start++,end = start;
            }
            else if(*start == '*'){
                stack[stacktop - 1] *= stack[stacktop];
                --stacktop,start++,end = start;
            }
            else if(*start == '/'){
                stack[stacktop - 1] /= stack[stacktop];
                --stacktop,start++,end = start;
            }
            else if(*start == '@'){
                ans = stack[stacktop--];
                break;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}



挺好


📑写在最后

今天就这样,明日再见0.0


相关文章
|
9月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
算法 程序员 C语言
全排列思路解析附C语言实现
全排列思路解析附C语言实现
|
C语言
【C语言】左旋字符串解题思想
【C语言】左旋字符串解题思想
90 0
|
C语言
汉诺塔问题C语言递归(详细)
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?(每次只能移动1个盘子,大盘子只能放在小盘子下面)
321 0
|
C语言
C语言解决青蛙跳台阶问题(递归与非递归)
一只青蛙可以一次跳1级台阶或一次跳2级台阶,例如:跳上第一级台阶只有一种跳法:直接跳1级即可。跳上两级台阶,有两种跳法:每次跳1级,跳两次;或者一次跳2级.问要跳上第级台阶有多少种跳法?
169 0
|
测试技术 C语言
栈和队列OJ题思路分享之括号匹配(C语言实现)
我们不久前给大家介绍了栈和队列这两种全新的结构,力扣上面有一些关于栈和队列的OJ题是非常经典的,这里我一共要给大家做三道题目的分享,分别是 1. 括号匹配问题: 力扣20题— 2. 用队列实现栈: 力扣225题— 3. 用栈实现队列: 力扣232题.今天这一章先分享第一个问题:括号匹配问题
|
存储 C语言
C语言题解——倒置字符串(剑指Offer 第58题)
C语言题解——倒置字符串(剑指Offer 第58题)
108 0
C语言题解——倒置字符串(剑指Offer 第58题)
|
C语言
C语言题解——除自身以外数组的乘积(力扣 第238题)
这是力扣题库中的一个中等难题,说是存在一个整型数组,求出各元素位上除此数外其他元素的乘积,比如存在数组[1,2,3,4],按照题目应该该输出[24,12,8,6],我们的解题思想为:求出各元素的左积和右积(当然不包含自己),然后将左积与右积相乘,就可以得到目标积数,拿上面的例子来说,下标0的左积为1(默认数组外为1),右积为24,相乘得到目标积24,其他元素也是依次类推。下面来看看具体讲解吧
188 0
C语言题解——除自身以外数组的乘积(力扣 第238题)
|
C语言
【C语言】变种水仙花题解
题目入口: BC38 变种水仙花
【C语言】变种水仙花题解
|
C语言
【C语言】递归详解汉诺塔问题
【C语言】递归详解汉诺塔问题
272 0
【C语言】递归详解汉诺塔问题