题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ #include <math.h> //是否为字符 int issy(char n , const char* symbol){ for(int i = 0 ; i < 5 ; i++){ if(n == symbol[i]) return 1; } return 0; } //符合优先级 int whot(char top , char sy){ if(top == '+' || top =='-'){ if(sy == '+' || sy == '-') return 0; } else if(top == '*'){ if(sy != '(' && sy !=')') return 0; } return 1; } //计算 void count(int* num , int* numt , char s){ int num1 = num[*numt] ; *numt = *numt - 1; int num2 = num[*numt]; if(s == '+') num[*numt] = num2 + num1; else if(s == '-') num[*numt] = num2 - num1; else num[*numt] = num1 * num2; } int solve(char* s ) { // write code here int num[100]; char sy[100]; int numt = -1 , syt = -1; char symbol[5] = {'+' , '-' , '*' , '(' , ')'}; while(*s != '\0'){ if(issy(*s , symbol) == 0){ int x = 0; while(issy(*s , symbol) == 0 && *s != '\0'){ x = x*10 + *s - '0'; s++; } num[++numt] = x; s--; } else{ if(syt == -1 || *s == '(' || sy[syt] == '(') sy[++syt] = *s; else{ char top = sy[syt]; if(whot(top , *s) == 0){ count(num , &numt , top); sy[syt] = *s; } else if(*s == ')'){ while(sy[syt] != '('){ top = sy[syt--]; count(num , &numt , top); } syt--; } else sy[++syt] = *s; } } s++; } while(syt > -1){ count(num , &numt , sy[syt]); syt--; } return num[0]; }