hdu 1237 简单计算器
2014-11-14 20:27
323 查看
简单计算器
题目链接:点击打开链接题目分析:这道题的重点是:运算符的优先级,先确定运算符的优先级,然后根据优先级计算。定义两个栈,分别存储数字,和运算符。
也是栈的简单应用吧。
注意:1、数字不只是单位数字,还有可能是多位。
2、注意输入0 + 0返回0.00 ,但是输入0,结束。
源代码:
#include<iostream> #include<string.h> #include<stack> using namespace std; char Precede(char a,char b) //比较运算符的优先级 { if(a=='+'||a=='-') { switch(b) { case '+': case '-':return '>';break; case '*': case '/':return '<';break; } } if(a=='*'||b=='/') return '>'; } double operate(double a,char c,double b) //运算 { switch(c) { case '+':return(a+b);break; case'-':return(a-b);break; case'*':return(a*b);break; case'/':return(a/b);break; } } int main() { stack<double>opnd; //存放数字 stack<char>optr; //存放运算符 //string s; char s[205]; char theta,c; int i,k; double a,b; //while(getline(cin,s),s!="0") while(gets(s)) { int l=strlen(s); if(l==1&&s[0]=='0') //注意0 + 0 = 0.00 break; opnd.push(s[0]-48); //因为s为字符型的,s[0]-48 将字符转化为数字 i=0; c=s[++i]; while(c!='\0') //表达式不结束 { if(c==' ') { c=s[++i]; continue; } if(c>='0'&&c<='9') { if(s[i-1]>='0'&&s[i-1]<='9') //注意,如若是像32这样连续数字的 { a=opnd.top()*10+c-48; opnd.pop(); opnd.push(a); } else opnd.push(c-48); c=s[++i]; } else { if(!optr.empty()) { switch(Precede(optr.top(),c)) //重点: 运算符的优先级 { case'<':optr.push(c); c=s[++i]; break; case'>':theta=optr.top(); //此处进行运算,并没有进栈。 optr.pop(); //只有前面字符的优先级高才运算 a=opnd.top(); opnd.pop(); b=opnd.top(); opnd.pop(); opnd.push(operate(b,theta,a)); //计算并进栈 break; } } else { optr.push(c); c=s[++i]; } } } while(!optr.empty()) //因为是先输入数字,所以可能有余下的运算符没有处理 { theta=optr.top(); optr.pop(); a=opnd.top(); opnd.pop(); b=opnd.top(); opnd.pop(); opnd.push(operate(b,theta,a)); } printf("%.2lf\n",opnd.top()); } return 0; }
相关文章推荐
- 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 简单计算器
- 九度1019:简单计算器 acmclub1918:简单计算器 HDU:1237
- [JAVA][HDU 1237][九度 1019][简单计算器]
- HDU 1237 简单计算器
- HDU-1237-简单计算器