/* * @(#) msu96_d.c - Problem 'D' ("Formula reducer") solution * of the ACM Programming Contest at the MSU in 1996. * (c) 1998 Ivan Maidanski http://ivmai.chat.ru * Freeware program source. All rights reserved. ** * Language: ANSI C * Tested with: Borland C++ v3.1 * Last modified: 1998-04-04 20:05:00 GMT+04:00 */ /* Input data file: d.dat */ #include /* FILE, EOF, fopen(), fscanf(), printf() */ char s[256]; char prev(int i) { while (i && s[--i]<=' '); return s[i]; } char next(int i) { while (s[++i] && s[i]<=' '); return s[i]; } int ispmsign(char c) { return c=='+' || c=='-'; } int ismdsign(char c) { return c=='*' || c=='/'; } int issign(char c) { return ispmsign(c) || ismdsign(c); } int main(void) { int k,cnt; int i,j; FILE *f=fopen("d.dat","rt"); while (fscanf(f,"%s\n",s)!=EOF && next(-1)!='#') { for (i=0;s[i];i++) if (s[i]=='(' && !(issign(prev(i)) && issign(next(i)))) { for (j=i+1;s[j] && s[j]<=' ';j++); for (j+=issign(s[j]),cnt=k=0;s[j] && (s[j]!=')' || 01 && (prev(i)=='-' || ismdsign(prev(i)) || ismdsign(next(j))))) { while (!!(s[j-1]=s[++j])); while (!!(s[i-1]=s[++i])); } } printf("%s\n",s); } return 0; }