gpt4 book ai didi

algorithm - 计算时进行高级操作的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:05 25 4
gpt4 key购买 nike

我正在做一个高级计算过程(类似于计算器的科学模式)。我正在寻找可以帮助我完成项目任务的算法。这是问题所在:

举个例子10+10*2。结果应该是 30。所以,我面临的问题是除法和乘法应该利用 +- 操作(即使没有括号)。我基本上知道如何制作一个具有基本功能的计算器,例如 10+10*2 的结果是 40(将第一个数字放在变量中,然后将第二个数字放在另一个变量中,然后再次在第一个变量中排名第三)。在这方面,我写了一些算法,但没有一个有效。我对此的解决方案是解析整个 strng '10+10*2' 然后将它们分开以检测操作 +、-、/和 *。然后重新计算过程。但这似乎有点长,我怀疑有很多“if”条件以及谁在计算时使用字符串?

我们可以讨论任何想法。
谢谢!

附言我熟悉几种语言,因此可以制定任何解决方案。我接受各种高级语言的伪代码。我只是不熟悉算法(编程逻辑)。

最佳答案

对于您的示例,最简单的解决方案是循环遍历表达式两次。

在第一次运行中,你只做乘法/除法,不加减任何东西。在第二轮中,没有乘法/除法,因此您可以从左到右进行。

伪代码:

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;
}
}

关于algorithm - 计算时进行高级操作的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22690343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com