#include < stdio.h> #include < stdlib.h> #include < string.h> typedef struct dd{ int i; struct dd * next; }woca; typedef struct aa{ char i; struct aa* next; }dota; void create(woca**fist) { *fist = (woca*)malloc(sizeof(woca)); (*fist)->i = -1; (*fist)->next = NULL; } void create_1(dota**fist) { *fist = (dota*)malloc(sizeof(dota)); (*fist)->i = '#'; (*fist)->next = NULL; } void push(woca*fist,int i) { woca*p = (woca*)malloc(sizeof(woca)); if(!p)printf("error"); p->i = i; if(fist->next == NULL) { fist->next = p; p->next=NULL; } else{ p->next = fist->next; fist->next = p; } } void push_zifu(dota*fist,char i) { dota*p = (dota*)malloc(sizeof(dota)); if(!p)printf("error"); p->i = i; if(fist->next == NULL) { fist->next = p; p->next=NULL; } else{ p->next = fist->next; fist->next = p; } } void look(dota*fist,char*i) { if(fist->next == NULL) *i = '#'; else *i = fist->next->i; } int opera(int i,char c,int j) { if(c=='+') return i+j; if(c=='-') return i-j; if(c=='*') return i*j; if(c=='/') return i/j; return 0; } int bijiao(char i,char j) { if((i=='*'||i == '/')&&(j=='-'||j=='+'||j =='#'))return 1; if(i =='(')return 1; if((i == '+'||i == '-')&&j == '#')return 1; if((i=='+'||i=='-')&&(j=='+'||j == '-'))return -1; if((i=='*'||i=='/')&&(j=='*'||j == '/'))return -1; if((i=='+'||i=='-')&&(j=='*'||j == '/'))return -1; if(j == '('&&(i =='+'||i == '-'||i == '/'||i =='*'))return 1; if(i == ')'&&j=='(')return 0; if(i == ')'&&j!='(')return -1; else return 2; } void pop_1(dota*fist,char *i) { if(fist->next == NULL) *i = '#'; else {dota* p = fist->next; *i= fist->next->i; fist->next=p->next; free(p);} } void suan(char a[],dota*fist,woca*hehe) { int i = 0; int shu[100]; int j = 0; int sum = 0; char i_1; char i_2; long t =strlen(a); while (a[i]!='\0') { j = 0; sum = 0; if(a[i]>='0'&&a[i]<='9') { while(a[i]>='0'&&a[i]<='9') { shu[j] = a[i]-'0'; i++; j++; } for(int jj = 0;jj<j;jj++) { for(int ww = 0;ww<(j-jj-1);ww++) shu[jj] = shu[jj]*10; sum=sum+shu[jj]; } printf("%d\n",sum); push(hehe, sum); } else { look(fist,&i_1); /* if(a[i]==')'&&i_1 == '(') { pop_1(fist, &i_2); } */ if(bijiao(a[i],i_1) == 1) { push_zifu(fist, a[i]); putchar(fist->next->i); } if(a[i] == ')') { //pop_1(fist, &i_2); while(i_2 !='(') {pop_1(fist, &i_2); if(i_2!='(') {woca*q; woca*qq; q = hehe->next; qq = q->next; hehe->next->i = opera(hehe->next->next->i, i_2, hehe->next->i); hehe->next->next = qq->next; //printf("1 %d %d\n",hehe->next->i,qq->i); free(qq); // printf("1 %d %d\n",hehe->next->i,hehe->next->next->i); } } } if(bijiao(a[i], i_1)==-1&&a[i]!=')') { woca*q; woca*qq; pop_1(fist, &i_2); q = hehe->next; qq = q->next; hehe->next->i = opera(hehe->next->next->i, i_2,hehe->next->i ); hehe->next->next = qq->next; printf("1 %d %d\n",hehe->next->i,qq->i); free(qq);//printf("1 %d %d\n",hehe->next->i,hehe->next->next->i); push_zifu(fist, a[i]); putchar(fist->next->i); } i++; } if(i == t&&hehe->next->next!=NULL) { woca*j = hehe->next; woca*p; for(;;) {pop_1(fist, &i_2); //if(i_2 == '(')pop_1(fist, &i_2); if(i_2 == '#')break; p=j->next; hehe->next->i = opera(hehe->next->next->i, i_2, hehe->next->i); hehe->next->next= p->next; if(j->next!=NULL) printf("2 %d %d\n",j->i,j->next->i); //printf("2 %d %d\n",j->i,j->next->i); free(p); } } } } int main(int argc, const char * argv[]) { // insert code here... char a[100]; woca*fist; dota*hehe; create(&fist); create_1(&hehe); scanf("%s",a); suan(a,hehe,fist); printf("%d\n",fist->next->i); return 0; }