荣誉版主
- 积分
- 1477
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2010-8-28
- 最后登录
- 1970-1-1
|
本帖最后由 vvnesaa 于 2011-4-21 13:39 编辑
贴个非递归。。。GG写的特别好看>_<
- #include <iostream>
- #include <functional>
- #include <algorithm>
- using namespace std;
- using namespace std::placeholders;
- int getInt()
- {
- int result = 0;
- while (true)
- {
- while (isspace(cin.peek())) cin.get();
- if (!isdigit(cin.peek())) return result;
- result = result * 10 + (cin.get() - '0');
- }
- }
- char getOp()
- {
- while (true)
- {
- if (cin.eof()) return '[/color];
- if (isspace(cin.peek()))
- cin.get();
- else
- return cin.get();
- }
- }
- int main()
- {
- function<int(int)> result = bind(plus<int>(), 0, _1);
- function<int(int)> term = bind(multiplies<int>(), 1, _1);
- while (!cin.eof())
- {
- int x = getInt();
- switch (getOp())
- {
- case '+':
- result = bind(plus<int>(), result(term(x)), _1);
- term = bind(multiplies<int>(), 1, _1);
- break;
- case '-':
- result = bind(minus<int>(), result(term(x)), _1);
- term = bind(multiplies<int>(), 1, _1);
- break;
- case '*':
- term = bind(multiplies<int>(), term(x), _1);
- break;
- case '/':
- term = bind(divides<int>(), term(x), _1);
- break;
- default:
- result = bind(plus<int>(), result(term(x)), _1);
- break;
- }
- }
- cout << result(0) << endl;
- return 0;
- }
复制代码 |
|