您的位置:首页 > 理论基础 > 数据结构算法

<九度 OJ>题目1019:简单计算器

2015-12-10 15:04 399 查看
题目描述:
    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
1 + 2
4 + 2 * 5 - 7 / 11
0

样例输出:
3.00
13.36

#include "string"
#include <iostream>
#include<iomanip>
#include <stack>
using namespace std;

string str;
unsigned int pos;

double getNum()
{
double v = 0;
for (; pos < str.length(); pos++)
{
if (str[pos] > '9' || str[pos] < '0')
{
break;
}
v *= 10;
v += str[pos] - '0';
}
return 1.0*v;
}

int main(int argc, char* argv[])
{
double a, b;
double v;
while (getline(cin,str))
{
//"1 + 2"
if (str.length()>200)
{
break;
}
stack<double> s;
pos = 0;
s.push(getNum());
if (str.length() == 1 && (str[0] - '0'== 0))
{
break;
}

while (pos < str.length())
{
switch (str[pos])
{
case '*':
pos=pos+2;
a = s.top();
s.pop();
b = getNum();
s.push(a*b);
break;
case '/':
pos=pos+2;
a = s.top();
s.pop();
b = getNum();
s.push(a / b);
break;
case '+':
pos=pos+2;
s.push(getNum());
break;
case '-':
pos=pos+2;
s.push(-1.0*getNum());
break;
case ' ':
pos++;
break;
default:
break;
}
}
v = 0;
while (!s.empty())
{
v += s.top();
s.pop();
}
cout << fixed << setprecision(2) << v << endl;//精确到小数点后两位
}
return 0;
}
/**************************************************************
Problem: 1019
User: EbowTang
Language: C++
Result: Accepted
Time:0 ms
Memory:1524 kb
****************************************************************/


注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/50249989

原作者博客:http://blog.csdn.net/ebowtang
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息