任意数学表达式计算

1.编程思路

任何表达式可分为3类:1.简单表达式,即只带加减乘除的运算表达式,如1+2,1+3/2,1*2*3+4*6等。2.只带有函数符号不带括号的表达式,如sin[30],exp[3+4*5],sin[1+sin[2]]等。3.一般表达式,即带有括号,简单表达式以及符号函数的表达式,如(1+2+sin[30])*3,2+sin[1+(sin[30]+1)*2]等。

基本算法流程图:

计算-java 数学表达式计算">

于是问题归结为几个子过程:1.判断表达式中是否存在括号 2.获取最内层括号内容 3.无括号计算函数 4.给定字符串位置,用已知字符串代替原字符串内容。

步骤1,2,4分别可以用一个函数实现:

//判断表达式中是否有括号
bool IsContainBracket(CString str);
//若存在括号,则获得最内层括号位置
void GetBracketPos(CString str,int *start,int *end);
//用一段字符代替两个位置之间的内容
CString ReplaceBetweenPos(CString toBeReplace,CString str,int start,int end);

步骤3较复杂,可以分解为几个子步骤,思路如下:

时间: 2024-09-24 11:55:32

任意数学表达式计算的相关文章

【原创】.NET开源表达式计算组件介绍与使用

       本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 本博客其他.NET开源项目文章目录:http://www.cnblogs.com/asxinyu/p/4329755.html 1.前言 日常开发中有很多地方使用到表达式计算,比如一个庞大灵活的人力资源管理系统中,涉及到薪酬管理,某些单位可能会经常对工资格式,计算方式进行变动,这个时候表达式计算就可以派上用场,当然还有很多地方,比如数学计算等环节中,对表达式计算的

数学表达式的计算-如何捕捉异常

在写程序的过程中,难免会出现各种各样的情况,有的情况也许不是我们想要的.有的人也许会用很多判断要严格控制程序,使其不会出现异常情况,但这样做可能会增加写程序的难度.其实我们还可以用一种更加简便的方法,那就是异常.在程序中合理的使用异常将使你在写程序中省去很多烦恼.在Delphi中,Borland 已经为我们定义了很多异常的类,我们可以直接使用.但是如果我们不去管异常的话,会使程序的的界面乱七八糟,下面就介绍两种常用的异常捕捉方法. 关于计算数学表达式,不同的人有自己不同的做法.有的用解析表达式的

.NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究,所以今天就通过一篇简单的文章来预览一下其强大的功能.本文曾在[原创].NET开源表达式计算组件介绍与使用一文中介绍过一个.NET平台开源的表达式计算组件NCal.不过经过比较还是这个Expression Evaluator比较强大,虽然部分功能有重叠.也都能计算常规的数学表达式.这个组件的

java实现任意四则运算表达式求值算法_C 语言

本文实例讲述了java实现任意四则运算表达式求值算法.分享给大家供大家参考.具体分析如下: 该程序用于计算任意四则运算表达式.如 4 * ( 10 + 2 ) + 1 的结果应该为 49. 算法说明: 1. 首先定义运算符优先级.我们用一个 Map<String, Map<String, String>> 来保存优先级表.这样我们就可以通过下面的方式来计算两个运算符的优先级了: /** * 查表得到op1和op2的优先级 * @param op1 运算符1 * @param op2

用Office工具编辑数学表达式

我是一位数学老师,在制作课件和编写电子教案时常常遇到数学表达式录入困难的问题,我在平时摸索中发现,如果没有好的数学公式编辑软件去使用,利用我们最常用的Office便可轻松解决各种数学表达式的录入问题.下面将我在制作课件和编写电子教案时总结出的输入数字表达式的方法介绍给大家. 上下标类表达式 例如要输入表达式"x12+y12",则在Word中就可轻松实现,方法是: 图1 1.运行Word,先输入"x12+y12". 2.选中文字中的"1",点按&q

算法-给定整数n,m&amp;amp;gt;=n,且m%4=0,求m的最小取值。要求:用一个数学表达式求m

问题描述 给定整数n,m>=n,且m%4=0,求m的最小取值.要求:用一个数学表达式求m 给定整数n,m>=n,且m%4=0,求m的最小取值.要求:用一个数学表达式求m 解决方案 求 n除 4 的模 加一 *4即可 即 m=(n/4+1)*4 解决方案二: m = n / 4 * 4; 解决方案三: m = (n % 4 == 0 ? 0 : 1) + n / 4 * 4; 解决方案四: m = ((n % 4 == 0 ? 0 : 1) + n / 4) * 4;

求思路:java 针对字符串表达式 计算

问题描述 有这样一些表达式b = a - 19;b = a + 1;b = a * 12;b = a - (a/200) * 80......等一系列的表达式相当于就两个变量 a ,b就是怎么用方法实现 提供一个 a 这样的值,加入都是int类型的就是 public int method(int num_a){ ...... //按照上面某个表达式 ,就相当于 用这里的变量num_a 去替换 上面表达式的 a,然后执行计算,返回b return num_b (按照某个表达式计算的结果)}大家给个

字符-jdk1.5 String类型的表达式 计算结果转换成Int

问题描述 jdk1.5 String类型的表达式 计算结果转换成Int String str = "3*5+5"; JDK1.5 有没有什么函数可以计算str然后放入int? 还是得字符截取一步一步来? 感谢各位大神的回复.不能全部采纳实属无奈.所以从逻辑严谨的角度,采纳同时回答两个问题的回复.再次感谢 解决方案 没有,自己看一下后缀表达式算法,参考下面链接http://www.cnblogs.com/gmq/archive/2013/05/30/3108849.html 解决方案二:

怎样实现任意数的任意次方的计算?

问题描述 怎样实现任意数的任意次方的计算? 解决方案 解决方案二:x的n次方:Math.Pow(x,n);解决方案三:搞个for循环,想要多少此方就循环多少次,小心别溢出解决方案四:引用1楼q107770540的回复: x的n次方:Math.Pow(x,n); 正解解决方案五:引用2楼lexfu的回复: 搞个for循环,想要多少此方就循环多少次,小心别溢出 不得不说--10.1的9.2次方肿么办啊还是Pow吧解决方案六:X^N解决方案七:Math.pow(x,n)//x的n次方 解决方案八:也可