http://acm.hdu.edu.cn/showproblem.php?pid=1237
不用栈的形式
View Code
#include<stdio.h>
#include<stack>
#include<string.h>
#include<iostream>
using namespace std;
char s[209];
double num[209];
char fu[209];
int main()
{
while(gets(s))
{
if(s[0]=='0'&&strlen(s)==1)
return 0;
memset(num,0,sizeof(num));
memset(fu,0,sizeof(fu));
int i;
int nadd=1;
int fadd=1;
for(i=0;s[i];i++)
{
if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
{
fu[fadd]=s[i];
fadd++;
}
if(s[i]>='0'&&s[i]<='9')
{
sscanf(s+i,"%lf",&num[nadd]);
nadd++;
while(s[i]!=' '&&s[i]!=0)i++;
i--;
}
}
for(i=1;i<=fadd-1;i++)
{
if(fu[i]=='/')
{
num[i+1]=num[i]*1.0/num[i+1];
num[i]=0;
continue;
}
if(fu[i]=='*')
{
num[i+1]=num[i]*1.0*num[i+1];
num[i]=0;
continue;
}
}
int j;
for(i=1;i<=fadd-1;i++)
{
if(fu[i]=='-')
{
j=i+1;
while(fu[j]=='*'||fu[j]=='/')//处理后 1 - 0 * 1
j++; // 要调到有乘除的最后一个数
num[i]=num[i]*1.0-num[j];
num[j]=0;
continue;
}
}
double all=0;
for(i=1;i<nadd;i++)
{
all+=num[i];
}
printf("%.2lf\n",all);
}
}