题解 | #表达式求值#
表达式求值
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];
}
查看3道真题和解析
