题解 | #四则运算#

四则运算

http://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

#include <stdio.h>
#include <string.h>

// 1.无括号 用栈先乘除后加减
// 遇到+-继续入栈,遇到*/出栈1个,和新元素计算后入栈
// 2.有括号 左括号开始递归1步骤,右括号出递归结果 入栈
//注意遇到括号内有负号先要变号再入栈
int i;
int compute(char *data);
int main()
{
    
    char str[1000];
    scanf("%s", str);
    i=0;
    int res = compute(str);
    printf("%d", res);

    return 0;
}

int compute(char *data)
{
    int stack[1000];
    int top = -1;
    int len = strlen(data);
    char flag = '+';
    while (i <=len)
    {
        int num = 0;
        if(data[i]=='-'){
            flag = '-';
            i++;
        }
        
        if (data[i] == '{' || data[i] == '[' || data[i] == '(')
        {
            i++;
            num = compute(data);
        }

        while (data[i] - '0' >= 0 && data[i] - '0'<=9)
        {
            num = num * 10 + data[i] - '0';
            i++;
        }

        switch(flag)
        {
        case '+':
            stack[++top] = num;
            break;
        case '-':
            stack[++top] = -num;
            break;
        case '*':
            stack[top] *= num;
            break;
        case '/':
            stack[top] /= num;
            break;
        }
        flag = data[i];
        if (data[i] == '}' || data[i] == ']' || data[i] == ')')
        {
            i++;
            break;
        }
        i++;
    }

    int ret = 0;
    for (int j = 0; j <= top; j++)
    {
        ret += stack[j];
    }

    return ret;
}
全部评论
如果100*-2就会计算错误,嗯嗯,可以试试,哈哈哈哈
1 回复 分享
发布于 2022-03-26 18:16
请教一下第44行num = num * 10 + data[i] - '0';为什么num要*10
点赞 回复 分享
发布于 2022-02-15 22:33
简洁利落
1 回复 分享
发布于 2022-02-12 18:56
这个递归,精彩,太精彩了,太巧妙啦
1 回复 分享
发布于 2022-06-18 15:13
flag = data[i]; if (data[i] == '}' || data[i] == ']' || data[i] == ')') { i++; break; }请教一下各位大佬,这里如果时右括号不是把括号赋给flag了吗
点赞 回复 分享
发布于 2023-06-14 16:56 广东
比那个转后缀表达式再什么什么的好理解多了
点赞 回复 分享
发布于 2024-03-03 17:35 江西
这代码可以说是美丽且实用
点赞 回复 分享
发布于 2024-12-25 16:11 广东

相关推荐

04-02 22:40
已编辑
电子科技大学 后端
谢谢大家啦!!!
坚定的芭乐反对画饼_许愿Offer版:有鹅选鹅,没鹅延毕
点赞 评论 收藏
分享
点赞 评论 收藏
分享
mq2:我倒是觉得这种敞亮一点好。能接受就去不能就不去呗。 完了跟现在“正常”公司一样,hr说的天花乱坠,进去一看根本就是996核动力牛马,想走又没应届生身份了。岂不是更糟。
点赞 评论 收藏
分享
评论
38
11
分享

创作者周榜

更多
牛客网
牛客企业服务