50006. Expression

難度:4.5/5

一開始沒想出來好的解法而用中序轉後序爆開做,後來看到morris大神的解法才想出來可以把整個expression改成以+分隔的若干個expressions.

eval.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdbool.h>
#include "eval.h"

bool check_invalid(int exp[]){
int n = exp[0];
for(int i = 2; i <= n; i += 2){
if(exp[i] > 4 || exp[i] <= 0) return true;
}
return false;
}


int eval(int exp[]) {
int n = exp[0];
if(check_invalid(exp)) return -2147483646;

int ans = 0;
int hold_val = exp[1];

for(int i = 3; i <= n; i += 2){
int op = exp[i - 1];
int num = exp[i];

if(op == 1){
ans += hold_val;
hold_val = num;
}
else if(op == 2){
ans += hold_val;
hold_val = -num;
}
else if(op == 3){
hold_val *= num;
}
else{
if(num == 0) return -2147483647;
else hold_val /= num;
}
}

ans += hold_val;
return ans;
}

C

eval.h

1
int eval(int exp[]);
C

50006. Expression
https://aaronlin1229.github.io/judgegirl_50006/
Author
Akizumi
Posted on
July 17, 2023
Licensed under