#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; char command[117]; char opnum[10117]; int solve(int exps[]){ memset(command, 0, sizeof(command)); scanf("%s", command); if(command[0] == 'E'){ return 0; } else if(command[0] == 'B'){ while(solve(exps)); } else if(command[0] == 'L'){ int i, t = -1; int texps[20] = {0}; scanf("%s", opnum); if(opnum[0] != 'n'){ t = atoi(opnum); } while(solve(texps)); if(t == -1){ for(i = 10; i > 0; i--){ texps[i] = texps[i - 1]; } texps[0] = 0; } else{ for(i = 0; i <= 10; i++){ texps[i] *= t; } } for(i = 0; i <= 10; i++){ exps[i] += texps[i]; } } else if(command[0] == 'O'){ scanf("%s", opnum); int t = atoi(opnum); exps[0] += t; return solve(exps); } return 1; } int main(){ int k, i, j, mflag, mcount = 1; int exps[20]; while(scanf("%d", &k) != EOF){ while(k--){ memset(exps, 0, sizeof(exps)); mflag = 0; solve(exps); printf("Program #%d\n", mcount++); printf("Runtime = "); for(i = 11; i >= 2; i--){ if(exps[i] != 0 && mflag != 0){ if(exps[i] != 1){ printf("+%d*n^%d", exps[i], i); } else{ printf("+n^%d", i); } } else if(mflag == 0 && exps[i] != 0){ mflag = 1; if(exps[i] != 1){ printf("%d*n^%d", exps[i], i); } else{ printf("n^%d", i); } } } if(exps[1] != 0 && mflag != 0){ if(exps[1] != 1){ printf("+%d*n", exps[1]); } else{ printf("+n"); } } else if(exps[1] != 0 && mflag == 0){ mflag = 1; if(exps[1] != 1){ printf("%d*n", exps[1]); } else{ printf("+n"); } } if(exps[0] != 0 && mflag != 0){ printf("+%d", exps[0]); } else if(exps[0] != 0 && mflag == 0){ mflag = 1; printf("%d", exps[0]); } if(mflag == 0){ printf("0"); } printf("\n\n"); } } return 0; }
递归模拟,代码写的很烂还参考了网上的=_=