南开大学研招网:关于数学表达式的计算?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/26 15:12:33
就是一个函数输入
一个字符串
比如:2+3*2-1+(-2)/2+2-2^2
输出他的值

任何语言都行
我想学习一下算法是不是我那样的
以及细节上的技巧

我做了一个vb的
写了近200行

确实要用堆栈,现在比较流行的方法是中缀式(就是你给出的式子)转换成后缀式在计算。
比如:a+b -> ab+;a+b*c -> abc*+;(a+b)*c -> ab+c*;注意:转换为后缀式后已经把括好去掉了。
先转后缀式(转换方法不多说了,网上可以找的到源码),如果是操作数就压栈,如果是操作符则将栈顶的两个数据进行相应运算,结果压栈(记住:前面的两个操作数已经出栈,取而代之的是运算结果),以此类推,当整个后缀式处理完后,栈顶元素及为表达式的结果.

不知道我叙述的清楚不

我想应该可以用堆栈来解决。具体的代码我就不写了,我感觉你要是想要做计算,可以做个计算器,想解析字符串,可以用正则表达式。

很麻烦的说~ 要用堆栈
竞赛的时候做过 现在基本上忘了