#include #include FILE *fi; int getword () { char *c,d[10]; c = d; *c = fgetc(fi); while (*c == ' ' || *c == '\n') { *c = fgetc(fi); } while (*c != ' ' && *c != '\n') { c++; *c = fgetc(fi); } switch (d[0]) { case 'B': case 'E': case 'L': case 'n': case 'O': return (-d[0]); break; } return(atoi(d)); } int main() { int i,j; int nas[20],n[20],cn,e[20],a,b; fi = fopen("complex.in","r"); fscanf(fi,"%i\n",&i); for (j = 1; j<=i; j++) { nas[0] = 1; for (a = 0; a < 20; a++) n[a] = 0; cn = 0; e[0] = 0; a = getword(); while (a != -'E' || cn != 0) { switch (a) { case -'E' : cn--; break; case -'L' : b = getword(); if (b == -'n') { nas[cn+1] = nas[cn]; e[cn+1] = e[cn] + 1; } else { nas[cn+1] = nas[cn]*b; e[cn+1] = e[cn]; } cn++; break; case -'O': b = getword(); n[e[cn]] += nas[cn]*b; break; } /* switch */ a = getword(); } printf("Program #%d\n",j); printf("Runtime = "); b = 0; for (a = 19; a>1 ; a--) if (n[a]==1) if (b!=0) printf("+n^%d",a); else {printf("n^%d",a); b++; } else if (n[a]!=0) if (b!=0) printf("+%d*n^%d",n[a],a); else {printf("%d*n^%d",n[a],a); b++; } if (n[1]==1) if (b!=0) printf("+n"); else {printf("n"); b++; } else if (n[1]!=0) if (b!=0) printf("+%d*n",n[1]); else {printf("%d*n",n[1]); b++; } if (n[0]!=0) { if (b!=0) printf("+%d",n[0]); else printf("%d",n[0]); } else printf("0"); printf("\n\n"); } fclose(fi); return 0; }