http://acm.nyist.net/JudgeOnline/problem.php?pid=128
前缀式求值 类似后缀式求值
从后向前进行运算
从后向前运算
遇到数字就压入栈中,遇到运算符号就提取栈顶的两个元素进行运算,结果保留到栈中
#include<bits/stdc++.h> using namespace std; double nu[2000]; char c[10000],s[10000]; int main() { while(gets(s)!=NULL) { int top=0; int len=strlen(s); int flag=0,tail; memset(nu,0,sizeof(nu)); for(int i=len-1;i>=0;) { if(s[i]>='0'&&s[i]<='9') //遇到数字就压人栈中 { while(s[i]!=' ') { i--; } tail=i; //获得位置 <span id="transmark"></span> i++; double a=s[i]-'0'; //提取数字并转化 i++; if(s[i]=='.'&&i<len) { i++; double bits=0.1; while(s[i]>='0'&&s[i]<='9') { a+=bits*(s[i]-'0'); bits*=0.1; i++; } } nu[++top]=a; i=tail-1; } if(s[i]==' ') i--; if(top>1&&(s[i]<'0'||s[i]>'9')) { switch(s[i]) { case '+':nu[top-1]=nu[top]+nu[top-1];break; case '-':nu[top-1]=nu[top]-nu[top-1];break; case '/':nu[top-1]=nu[top]/nu[top-1];break; case '*':nu[top-1]=nu[top]*nu[top-1];break; } top--; // cout<<nu[top]<<endl; i--; if(s[i]==' ') i--; } } printf("%.2lf\n",nu[top]); } return 0; }