您的位置:首页 > 其它

四则运算

2016-09-20 20:29 78 查看
同样还是华为oj上的题,利用栈的思想实现

最后算出的数据都只有加减法,没有乘除法。

#include<string>

#include<iostream>

#include<algorithm>

#include<sstream>

#include<vector>

#include<deque>

using namespace std;

void addnum(deque<string>& rec, int pre)

{
if (!rec.empty())

{

int cur = 0;
if (rec.back() == "*" || rec.back() == "/")
{

string tmp = rec.back();

rec.pop_back();

stringstream s1(rec.back());

s1 >> cur;

rec.pop_back();

pre = (tmp == "*" ? cur*pre : cur / pre);

}

}

stringstream ss;

ss << pre;

rec.push_back(ss.str());

return;
}

int getNum(deque<string>& rec)

{
int sum = 0;

int pre = 0;

string f = "+";

while (!rec.empty())

{

stringstream ss(rec.front());
ss >> pre;
rec.pop_front();
sum = (f == "+" ? (sum + pre) : (sum - pre));
if (!rec.empty())
{

f = rec.front();

rec.pop_front();

}

}

return sum;
}

int* cal(string& s, int i)

{
deque<string> rec;

int pre = 0;

while (s[i] != ')'&&s[i] != ']'&&s[i] != '}'&&i<s.size())

{

if (s[i] >= '0'&&s[i] <= '9')
{

pre = pre * 10 + (s[i] - '0');

i++;

}
else if (s[i] != '(' && s[i] != '[' && s[i] != '{'){

addnum(rec, pre);

string sas;

sas += s[i];

rec.push_back(sas);

pre = 0;

i++;

}
else{

int* tmp = NULL;

tmp = cal(s, i + 1);

pre = tmp[0];

i = tmp[1] + 1;

}

}

addnum(rec, pre);

int *r = new int[2];

r[0] = getNum(rec);

r[1] = i;

return r;

}

int main()

{
string s;

while (cin >> s)

{

int* sum = cal(s, 0);
cout << sum[0] << endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: