Problem Description
Input
Output
Example Input
59*684/-3*+#
Example Output
57
Hint
Author
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INIT_STACK_SIZE 100000
#define stackincrement 100
typedef int element ;
typedef struct
{
element *base,*top;
int stacksize;
} Sqstack;
int Initstack(Sqstack *s)
{
s->base=(element *)malloc(INIT_STACK_SIZE*sizeof(element ));
if(!s->base)
return -1;
s->top=s->base;
s->stacksize=INIT_STACK_SIZE;
return 0;
}
int Pushstack(Sqstack *s,int n)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(element *)realloc(s->base,(INIT_STACK_SIZE+stackincrement)*sizeof(element));
if(!s->base) return -1;
s->top=s->base+s->stacksize;
s->stacksize+=stackincrement;
}
*(s->top++)=n;
return 0;
}
int Popstack(Sqstack *s)
{
if(s->top==s->base) return -1;
return *(--s->top);
return 0;
}
void sum(Sqstack *s)
{
char ch[100];
int i;
int k,g;
scanf("%s",ch);
for(i=0; i<strlen(ch); i++)
{
if(ch[i]>='1'&&ch[i]<='9') //当字符为数字时,直接进栈
Pushstack(s,ch[i]-'0');
else if(ch[i]=='*')
{
k=Popstack(s);
g=Popstack(s);
Pushstack(s,g*k);
}
else if(ch[i]=='/')
{
k=Popstack(s);
g=Popstack(s);
Pushstack(s,g/k);
}
else if(ch[i]=='+')
{
k=Popstack(s);
g=Popstack(s);
Pushstack(s,g+k);
}
else if(ch[i]=='-')
{
k=Popstack(s);
g=Popstack(s);
Pushstack(s,g-k);
}
else if(ch[i]=='#')
{
printf("%d\n",Popstack(s));
}
}
}
int main()
{
Sqstack s;
Initstack(&s);
sum(&s);
return 0;
}