题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=26
C语言源码:
#include<stdio.h>
#include<string.h>
int Precede(char a,char b)
{
int p[5][5]={{1,1,-1,-1,1},{1,1,-1,-1,1},{1,1,1,1,1},{1,1,1,1,1},{-1,-1,-1,-1,0}};
//加、减、乘、除、#
int m,n;
switch(a)
{
case '+':m=0;break;
case '-':m=1;break;
case '*':m=2;break;
case '/':m=3;break;
case '#':m=4;break;
}
switch(b)
{
case '+':n=0;break;
case '-':n=1;break;
case '*':n=2;break;
case '/':n=3;break;
case '#':n=4;break;
}
return p[m][n];
}
double operate(double a,double b,char s)
{
switch(s)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int main()
{
double optr[205],x,y;
char opnd[205],a[205],s;
int i,top,toptr,topnd,n;
double num;
gets(a);
while(a[0]!='0')
{
num=0;
toptr=0;
topnd=0;
opnd[topnd++]='#';
i=0;
n=(int)strlen(a);
a[n]='#';
a[n+1]='\0';
n++;
while(i<n)
{
if(i==n-1&&topnd==1)
break;
if(a[i]>='0'&&a[i]<='9')
{
while(a[i]>='0'&&a[i]<='9')
{
num=num*10+a[i]-'0';
i++;
}
optr[toptr++]=num;
num=0;
}
else
if(a[i]==' ')
i++;
else
{
if(Precede(opnd[topnd-1],a[i])<0)
opnd[topnd++]=a[i++];
else
if(Precede(opnd[topnd-1],a[i])>0)
{
toptr--;
y=optr[toptr--];
x=optr[toptr];
s=opnd[--topnd];
optr[toptr++]=operate(x,y,s);
}
}
}
printf("%.2lf\n",optr[toptr-1]);
gets(a);
}
}