四则运算 .

输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。字符串长度满足1≤n≤1000

输入描述:输入一个算术表达式
输出描述:得到计算结果示
输入:3+2*{1+2*[-4/(8-6)+7]}
输出:25

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

// 1.无括号 用栈先乘除后加减
// 遇到+-继续入栈,遇到*/出栈1个,和新元素计算后入栈
// 2.有括号 左括号开始递归1步骤,右括号出递归结果 入栈
//注意遇到括号内有负号先要变号再入栈
int compute(char *data)
{
    int stack[1000];
    int top = -1;
    int len = strlen(data);
    char flag = '+';
    int i=0;
    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;
}

int main()
{
    char str[1000];
    scanf("%s", str);
    int res = compute(str);
    printf("%d", res);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夏与冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值