题目地址:http://jobdu.sinaapp.com/problem.php?cid=1040&pid=26
C语言源码:
#include<stdio.h>
#include<string.h>
#define maxsize 300
int precede(char a,char b)
{
int m[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 i,j;
switch(a)
{
case '+':i=0;break;
case '-':i=1;break;
case '*':i=2;break;
case '/':i=3;break;
default :i=4;break;
}
switch(b)
{
case '+':j=0;break;
case '-':j=1;break;
case '*':j=2;break;
case '/':j=3;break;
default :j=4;break;
}
return m[i][j];
}
double operate(double a,char s,double b)
{
switch(s)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int main()
{
int topfu,topshu,i,x,len;
double shu[maxsize],a,b;
char fu[maxsize],s[maxsize],y;
gets(s);
while(1)
{
if(s[0]=='0'&&s[1]=='\0')
break;
len=(int)strlen(s);
s[len]='#';
s[len+1]='\0';
topfu=0;
topshu=0;
fu[topfu++]='#';
i=0;
x=0;
while(s[i]!='\0')
{
if(s[i]>='0'&&s[i]<='9')
x=x*10+s[i]-'0';
else
{
if(s[i]!=' ')
{
shu[topshu++]=x;
x=0;
while(precede(s[i],fu[topfu-1])<0)
{
topshu--;
b=shu[topshu];
topshu--;
a=shu[topshu];
topfu--;
y=fu[topfu];
shu[topshu++]=operate(a,y,b);
}
if(s[i]!='#')
fu[topfu++]=s[i];
}
}
i++;
}
printf("%.2lf\n",shu[topshu-1]);
gets(s);
}
}