题解 | #四则运算#

四则运算

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

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

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

int calcu(char *str){
    char flag = '+';
    int num = 0,ret = 0;
    int stack[1000] = {0},esp = -1;
    while(i<strlen(str)){
        num = 0;
        flag = '+';
        if(str[i]=='-' || str[i]=='+' || str[i]=='*' || str[i]=='/'){
            flag = str[i];
            i ++;
        }
        if(str[i]=='(' || str[i]=='[' ||str[i]=='{'){
            i ++;
            num = calcu(str);
        }
        while(str[i]>='0' && str[i]<='9'){
            num = num*10 + str[i] - '0';
            i ++;
        }
        switch(flag){
            case '+':
            stack[++esp] += num;
            break;
            case '-':
            stack[++esp] -= num;
            break;
            case '*':
            stack[esp] *= num;
            break;
            case '/':
            stack[esp] /= num;
            break;
        }
        if(str[i]==')' || str[i]==']' ||str[i]=='}'){
            i ++;
            break;
        }
    }
    for(int k=0;k<=esp;k++) ret += stack[k];
    return ret;
}

全部评论

相关推荐

水色铃音:可以去找射频相关的岗位,比如圣邦微?或者像做产品的,比如xiaomi,oppovivo之类的,都需要天线调试的工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务