我正在进行高级计算过程(类似于计算器的科学模式)。我正在寻找可以帮助我完成项目任务的算法。这是问题所在:
我们举个例子10+10*2
。这个结果应该是30
。所以,我面临的问题是除法和乘法应该利用+
和-
运算(即使没有括号)。我基本上知道如何做一个计算器,它具有像10+10*2
的结果这样的基本函数40
(将第一个数字放在变量中,然后将第二个放在另一个变量中,第三个放在第一个变量中)。关于,我写了一些算法,但没有一个有效。我对此的解决方案是解析整个strng '10+10*2'
然后拆分它们以检测操作+, - ,/和*。然后重新计算过程。但这似乎有点长,我怀疑很多"如果"条件加上谁在计算时使用字符串?
我们可以讨论任何想法 谢谢!
P.S。我熟悉几种语言,因此可以制定任何解决方案。我接受各种高级语言的伪代码。我只是不熟悉算法(编程逻辑)。
答案 0 :(得分:0)
对于您的示例,最简单的解决方案是在表达式中循环两次。
在第一次运行中,你只能乘以/除,你不要添加或减去任何东西。 在第二轮中,没有乘法/除法,因此您可以从左到右进行。
伪代码:
for (number : numbers) { //for each number in numbers in your expression
if (next operator is */){
number */= nextNumber();
removeNextOperator();
removeNextNumber();
doNotMoveFromThisNumberInNextStep(); //like decrementing index variable in classic for-cycle
}
}
现在我们只有+ - 表达,你说你知道怎么做
我想了一下,可以一次完成!您只需要记住在找到* /。
时从添加/减少中获得的总和伪代码:
int sum = 0;
for (number : numbers) { //for each number in numbers in your expression
if (next operator is */){
number */= nextNumber();
removeNextOperator();
removeNextNumber();
doNotMoveFromThisNumberInNextStep(); //like decrementing index variable in classic for-cycle
} else { //next operator is +- or the last number
sum +-= numberBefore() +- number;
}
}
答案 1 :(得分:0)
您需要实现操作优先级,并且您只有两个类别[+ - ] [* /] (但常见的算法是相同的):
是的,很多语言支持eval(arithmetic expression)