假设给出了一个数学表达式,其中包含任意数量的分数。
例如:
(x+2) / (1+ 1 / (x-2))
如何输出表达式中的每个除数?对于上面的示例,输出必须是:
1+1/(x-2)
x-2
因为1+1/(x-2)
有一个除法,而后者又包含x-2
的除法。
我只获得第一个除数,即第一个除数后的整个除数。我如何得到所有除数?
编辑:他要求的是获取表达式中的所有除数。
答案 0 :(得分:1)
除法是a / b
形式的表达式,其中a和b本身可以是数字,变量或表达式。 a
是"被分红",b
是"除数"。您希望输出表达式中的每个除数。
关键是要意识到表达式实际上是二叉树结构。树的节点是符号,它们组合了两个子表达式。叶子(没有后代的节点)是变量或数字。以下是您的表达示例:
最高操作是最后发生的分裂。左边是x + 2
,它由两个叶节点(x和2)和+操作组成。右边是子表达式(1 + 1 /(x - 2))。请注意,最后一部分很棘手。如果你只是从左到右看运算符,你可能会把它误解为(1 + 1)/(x - 2)。但它真的是1 +(1 /(x - 2)),因为你需要考虑运算符优先级。
您需要做的是创建一个在内存中构建树的解析器,同时考虑括号和运算符优先级。如果你想要所有除数,你可以遍历树中的每个节点,如果它是一个除法节点,你要求它的右手孩子的表达。必须重新填充括号,或者您可以在解析期间缓存部分字符串,并将这些部分链接到节点。
这不是提供现成代码的答案,但正如评论中所述,Stack Overflow并不适合这样做。如果提出一个非常具体的问题,可能会提供代码,但对于这样一个更大的问题,我们更愿意解释"如何",并将实际的实现留给您。无论如何,这是你的工作,家庭作业或爱好。