輸入一個表達式(用字符串表示),求這個表達式的值。
保證字符串中的有效字符包括[‘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;
}