提交时间:2026-06-12 14:57:10
运行 ID: 91026
// 算法竞赛->第1章->1.3 #include <cstdio> #include <cstring> int top = 0; char st[110]; char s[110]; char ans_s[110]; int l; int len; long long num[110]; long long pow(long long x, long long y) { long long sum = 1; while(y > 0) { if(y & 1) sum *= x; x = x * x; y >>= 1; } return sum; } int main() { scanf("%s", s + 1); len = strlen(s + 1) + 1; s[len] = ')'; for(int i = 1; i <= len; i++) { if(s[i] >= '0' && s[i] <= '9') { ans_s[++l] = s[i]; } else if(s[i] == '(') { st[++top] = '('; } else if(s[i] == ')') { while(top > 0 && st[top] != '(') {ans_s[++l] = st[top]; top--;} top--; } else if(s[i] == '+' || s[i] == '-') { while(top > 0 && st[top] != '(') {ans_s[++l] = st[top]; top--;} st[++top] = s[i]; } else if(s[i] == '*' || s[i] == '/') { while(top > 0 && (st[top] == '*' || st[top] == '/' || st[top] == '^')) {ans_s[++l] = st[top]; top--;} st[++top] = s[i]; } else if(s[i] == '^') { st[++top] = s[i]; } else { puts("roammer AK CSP-J/CSP-S/NOIP/NOI/CTSC/APIO/ICPC/IOI!!!"); } } for(int i = 1; i <= l; i++) printf("%c ", ans_s[i]); puts(""); len = l; l = 0; for(int i = 1; i <= len; i++) { if(ans_s[i] >= '0' && ans_s[i] <= '9') { num[++l] = ans_s[i] - '0'; } else { if(ans_s[i] == '+') { long long a = num[l - 1]; long long b = num[l]; l--; num[l] = a + b; } if(ans_s[i] == '-') { long long a = num[l - 1]; long long b = num[l]; l--; num[l] = a - b; } if(ans_s[i] == '*') { long long a = num[l - 1]; long long b = num[l]; l--; num[l] = a * b; } if(ans_s[i] == '/') { long long a = num[l - 1]; long long b = num[l]; l--; num[l] = a / b; } if(ans_s[i] == '^') { long long a = num[l - 1]; long long b = num[l]; l--; num[l] = pow(a, b); } for(int j = 1; j <= l; j++) printf("%lld ", num[j]); for(int j = i + 1; j <= len; j++) printf("%c ", ans_s[j]); puts(""); } } return 0; }