hdu 1237 简单计算器
2012-11-01 17:15
246 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237
#include<stdio.h> #include<string.h> #include<stack> #include<algorithm> using namespace std; char s[300],suffix[1000]; int Priority(char ch)//各个符号的优先级 { switch(ch) { case '#':return 0; case '+':return 1; case '-':return 1; case '*':return 2; case '/':return 2; } return -1; } int is_number(char ch)//是不是数字 { if(ch>='0'&&ch<='9') return 1; return 0; } void Transform(char *suffix,char *s)//转换成后缀式 { stack<char>op; int l=strlen(s),i,k=0; op.push('#'); for(i=0;i<l;i++) { if(is_number(s[i])||s[i]==' ') suffix[k++]=s[i]; else { while(!op.empty()&&Priority(op.top())>=Priority(s[i]))//将stack中的所有的优先级不小于当前操作符的优先级的操作符发送给后缀式 { suffix[k++]=op.top(); // printf("%c\n",op.top()); op.pop(); } if(s[i]!='#') op.push(s[i]); } } suffix[k]='\0'; } void Calculate() { stack<double>ans; int i=0,l=strlen(suffix); while(i<l) { if(suffix[i]==' ') { i++;continue; } if(suffix[i]=='#') break; else { double a=0; int flag=0; while(is_number(suffix[i])) { a*=10; a+=(suffix[i++]-'0'); flag=1; } if(flag) ans.push(a); if(suffix[i]==' ') {i++;continue;}//不要写成if(suffix[i++]=' ') if(Priority(suffix[i])>0) { double num1,num2,num3; num1=ans.top(); ans.pop();//注意弹出。 num2=ans.top(); ans.pop(); switch(suffix[i++]) { case '+':num3=num2+num1;break; case '-':num3=num2-num1;break; case '*':num3=num2*num1;break; case '/':num3=num2/num1;break; } ans.push(num3); } } } printf("%.2lf\n",ans.top()); } int main() { while(gets(s))//注意用gets,因为有空格,不要用scanf { memset(suffix,NULL,sizeof(suffix)); int l=strlen(s); if(l==1&&s[0]=='0') break; else { s[l]='#';//加个#,作为结束标志 Transform(suffix,s); //printf("%s\n",suffix); Calculate(); } } return 0; }
相关文章推荐
- HDU 1237 简单计算器(stack)
- HDU 1237 简单计算器
- HDU 1237 简单计算器
- hdu 1237 简单计算器
- HDU-1237 简单计算器(使用栈和不用栈的解法)
- HDU 1237 简单计算器
- hdu 1237简单计算器
- HDU 1237 - 简单计算器 表达式求值
- HDU 1237 简单计算器(栈)
- hdu 1237 简单计算器
- HDU 1237 简单计算器(数据结构)
- HDU 1237 简单计算器(栈)
- HDU:1237 简单计算器(栈)
- HDU——1237简单计算器
- 简单计算器-HDU - 1237
- hdu 1237 简单计算器
- HDU 1237 简单计算器 表达式求值
- Hdu 1237 简单计算器
- hdu 1237 Java 简单计算器
- hdu 1237 简单计算器