输入样例:
62/3*
输出样例:
9.00
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100 //存储空间初始分配
#define STACKINCREMENT 10 //存储空间分配增量
typedef int Status;
typedef float SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
Status InitStack(SqStack &s)
{
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if (!s.base)
exit(OVERFLOW); //存储分配失败
s.top=s.base;
s.stacksize =STACK_INIT_SIZE;
return OK;
}
Status GetTop(SqStack s, SElemType &e)//获取栈顶元素
{
if(s.top==s.base)
return ERROR;
e=*(s.top-1);
return OK;
}
Status Push(SqStack &s,SElemType e)//进栈
{
//插入元素e为新的栈顶元素
if(s.top-s.base>=s.stacksize)
{
//栈满,追加存储空间
s.base = (SElemType*)realloc(s.base, (s.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!s.base)
exit(OVERFLOW); //存储分配失败
s.top = s.base + s.stacksize;
s.stacksize +=STACKINCREMENT;
}
*s.top++=e;
return OK;
}
Status Pop(SqStack &s,SElemType &e)//出栈
{
if(s.top==s.base)
return ERROR;
e=*--s.top;
return OK;
}
Status StackEmpty(SqStack s)//判断栈是否为空
{
if(s.top==s.base)
return OK;
else
return ERROR;
}
int main()
{
SqStack s;
InitStack(s);
SElemType b[1000];
char a[1000];
scanf("%s",a);
SElemType e;
int len=strlen(a);
int i,j=0;
for(i=0; i<len; i++)
{
if(a[i]>='0'&&a[i]<='9')//是数字,进栈
{
b[j]=a[i]-'0';
Push(s,b[j]);
j++;
}
else if(a[i]=='+')
{
// if(a[j-1]>='0'&&a[j-1]<='9'&&a[j-2]>='0'&&a[j-2]<='9')
// {
Pop(s,b[j-1]);
float t=b[j-1];
Pop(s,b[j-2]);
float k=b[j-2];
j-=2;
b[j]=k+t;
Push(s,b[j]);
j++;
//}
}
else if(a[i]=='-')
{
Pop(s,b[j-1]);
float t=b[j-1];
Pop(s,b[j-2]);
float k=b[j-2];
j-=2;
b[j]=k-t;
Push(s,b[j]);
j++;
}
else if(a[i]=='*')
{
Pop(s,b[j-1]);
float t=b[j-1];
Pop(s,b[j-2]);
float k=b[j-2];
j-=2;
b[j]=k*t;
Push(s,b[j]);
j++;
}
else if(a[i]=='/')
{
Pop(s,b[j-1]);
float t=b[j-1];
Pop(s,b[j-2]);
float k=b[j-2];
j-=2;
if(t!=0)
{
b[j]=k/t;
Push(s,b[j]);
j++;
}
}
else if(a[i]=='%')
{
Pop(s,b[j-1]);
int t=b[j-1];
Pop(s,b[j-2]);
int k=b[j-2];
j-=2;
if(t!=0)
{
b[j]=k%t;
Push(s,b[j]);
j++;
}
}
}
GetTop(s,e);
float m=e;
printf("%.2f",m);
return 0;
}