TLE最后两个点求调
查看原帖
TLE最后两个点求调
1789712
youngwayboy楼主2025/8/1 20:42
#include <bits/stdc++.h>
int n[50];
int t1 = -1;
char o[50];
int t2 = -1;
int p(char c) {
    if (c == '^') return 3;
    if (c == '*' || c == '/') return 2;
    if (c == '+' || c == '-') return 1;
    return 0;
}
void c() {
    int b = n[t1--];
    int a = n[t1--];
    char op = o[t2--];
    int r;
    if (op == '+') r = a + b;
    else if (op == '-') r = a - b;
    else if (op == '*') r = a * b;
    else if (op == '/') r = a / b;
    else if (op == '^') {
        r = 1;
        for (int i = 0; i < b; i++) {
            r *= a;
        }
    }
    n[++t1] = r;
}
int main() {
    char s[100];
    scanf("%s", s);
    int l = strlen(s);
    int i = 0;
    while (i < l) {
        if (s[i] >= '0' && s[i] <= '9') {
            int m = 0;
            while (i < l && s[i] >= '0' && s[i] <= '9') {
                m = m * 10 + (s[i] - '0');
                i++;
            }
            n[++t1] = m;
        } else if (s[i] == '(') {
            o[++t2] = s[i];
            i++;
        } else if (s[i] == ')') {
            while (o[t2] != '(') {
                c();
            }
            t2--;
            i++;
        } else {
            while (t2 != -1 && o[t2] != '(' && p(o[t2]) >= p(s[i])) {
                c();
            }
            o[++t2] = s[i];
            i++;
        }
    }
    while (t2 != -1) {
        c();
    }
    printf("%d", n[t1]);
    return 0;
}
2025/8/1 20:42
加载中...