HDU-1237 简单计算器【栈】
2017-11-12 16:17
260 查看
简单计算器
[b]Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22740 Accepted Submission(s): 8230
[/b]
[align=left]Problem Description[/align]
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
[align=left]Input[/align]
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
[align=left]Output[/align]
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
[align=left]Sample Input[/align]
1 + 2
4 + 2 * 5 - 7 / 11
0
[align=left]Sample Output[/align]
3.00
13.36
#include<bits/stdc++.h> using namespace std; int main() { char s[222]; while(gets(s),strcmp(s,"0")) { int len=strlen(s); stack<double>num;//存储整数 stack<char>op; //存储运算符 for(int i=0; i<len; i++) { if(s[i]==' ')//空格直接跳过 continue; else if(s[i]=='*'||s[i]=='/')//乘除法,运算完后将结果进栈 { double x=num.top();//拿出数字栈中的栈顶元素 num.pop(); double y=0; int j; for(j=i+2; j<len; j++) //提取出字符串中的整数 { if(s[j]!=' ') y=y*10+s[j]-'0'; else break; } //将结果进栈 if(s[i]=='*') num.push(x*y); else num. 4000 push(x/y); i=j; } else if(s[i]=='+'||s[i]=='-') //加减法,直接进栈 op.push(s[i]); else//数字则提取出来进栈 { double y=0; int j; for(j=i; j<len; j++) { if(s[j]!=' ') y=y*10+s[j]-'0'; else break; } i=j; num.push(y); } } //因为进栈之后出栈顺序与运算顺序相反,所以要将栈内元素反转 stack<double>nnum; stack<char>oop; while(!num.empty()) { double temp=num.top(); nnum.push(temp); num.pop(); } while(!op.empty()) { char temp=op.top(); oop.push(temp); op.pop(); } while(!nnum.empty()&&!oop.empty()) { double x=nnum.top();//拿出第一个整数 nnum.pop(); double y=nnum.top();//拿出第二个整数 nnum.pop(); char ope=oop.top();//拿出运算符 oop.pop(); //将结果进栈 if(ope=='+') nnum.push(x+y); else nnum.push(x-y); } printf("%.2lf\n",nnum.top()); } return 0; }
相关文章推荐
- HDU 1237 简单计算器
- 【HDU 1237】简单计算器
- hdu 1237 简单计算器
- HDU 1237 简单计算器
- 【STL基础03】HDU-1237-简单计算器
- HDU 1237 简单计算器
- HDU-简单计算器-1237
- HDU 1237 简单计算器(stack)
- HDU 1237 简单计算器 双栈法求表达式
- hdu 1237 简单计算器
- HDU 1237简单计算器
- HDU 1237 简单计算器
- hdu 1237简单计算器
- HDU 1237 简单计算器
- HDU 1237 简单计算器 表达式求值
- hdu -1237- 简单计算器(栈实现)
- hdu 1237 Java 简单计算器
- 简单计算器-HDU - 1237
- hdu 1237 简单计算器(数组模拟栈,队列)
- HDU 1237 简单计算器 (栈模拟)