#include #include int S[2000]; int NS; int Num = 1; FILE *IF; void Push(int i) { S[NS++] = i; } void Pop(void ) { NS--; } int P[20]; int nextchar(void ) { int c; while (1) { c = getc(IF); if (isalpha(c)) break; if (isdigit(c)) break; } return c; } void Match() { char s[200]; int i; NS = 1; S[0] = 1; for (i=0; i < 20; i++) P[i] = 0; fscanf(IF,"%s",s); while (NS) { fscanf(IF,"%s",s); if (!strcmp(s,"END")) { Pop(); continue; } if (!strcmp(s,"LOOP")) { int c; int num; c = nextchar(); if (isdigit(c)) { ungetc(c,IF); fscanf(IF,"%d",&num); Push(num); } else Push(-1); continue; } if (!strcmp(s,"OP")) { int d=0,num,i; fscanf(IF,"%d",&num); for (i=0 ; i < NS; i++) if (S[i] == -1) d++; else num*=S[i]; P[d] += num; continue; } } } int NumP,i,Plus; int main() { IF = fopen("complex.in","r"); fscanf(IF,"%d",&NumP); for (;NumP; NumP--) { Match(); printf("Program #%d\nRuntime = ",Num++); Plus = 0; for (i=15; i ; i--) if (i == 1) switch(P[i]) { case 0: break; case 1: if (Plus) printf("+"); Plus = 1; printf("n"); break; default: if (Plus) printf("+"); Plus = 1; printf("%d*n",P[i]); break; } else switch(P[i]) { case 0: break; case 1: if (Plus) printf("+"); Plus = 1; printf("n^%d",i); break; default: if (Plus) printf("+"); Plus = 1; printf("%d*n^%d",P[i],i); break; } if (Plus) { if (P[0]) { printf("+"); printf("%d\n\n",P[0]); } else puts(""); puts(""); } else printf("%d\n\n",P[0]); } return 0; }