#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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。