C# 用bodmas在C语言中求解方程#
我有类似于C# 用bodmas在C语言中求解方程#,c#,C#,我有类似于(7+((8%2)(7%3))。我想用bod-mas来解决这个问题:第一个括号应该在除法、乘法、加法和减法之后求解 我有一个程序,在这个程序中,用户使用基本工资等工资总额创建一个公式。之后,我发现他们的价值,如上面的方程,现在我想解决它 我参观了;他们给出了如下解决方案: string equationString = "(7+((8%2)(7%3)))"; string explicitMultiply = equation String.Replace(")(", ")*(");
(7+((8%2)(7%3))
。我想用bod-mas来解决这个问题:第一个括号应该在除法、乘法、加法和减法之后求解
我有一个程序,在这个程序中,用户使用基本工资等工资总额创建一个公式。之后,我发现他们的价值,如上面的方程,现在我想解决它
我参观了;他们给出了如下解决方案:
string equationString = "(7+((8%2)(7%3)))";
string explicitMultiply = equation String.Replace(")(", ")*(");
但它不起作用。为什么?C#有它
((8%2)(7%3))//我累了,但它给了我一个错误的方法名
期望
这就是结果
(8 % 2) //return 0
(7 +0 ) // returns 7
最后
(7 + ((8 % 2)*(7 % 3))) //return 7
更新:
您的代码完全是一个字符串,不会执行该字符串以返回整数
string equationString = "(7+((8%2)(7%3)))";
string explicitMultiply = equationString.Replace(")(", ")*(");
Console.WriteLine(explicitMultiply);
以字符串形式返回(7+((8%2)*(7%3))
如果你想做一个等式转换,比如或
再看一看你真的在问隐式乘法。您引用的解决方案不适用于“7(3+4)”之类的情况。只有当隐式乘法的两边都有一个括号时,它才会起作用 隐式乘法在实践中很难实现。规则是说,如果由于缺少运算符而导致解析失败,则应添加乘法符号
引用的解决方案在右边,但不完整。如果要计算该字符串,则可以使用开源框架 您还可以使用在中定义的方法对其进行评估 这就像:
string equationString = "(7+((8%2)(7%3)))";
string explicitMultiply = equationString.Replace(")(", ")*(");
double f = Evaluate(explicitMultiply);
static double Evaluate(string expression)
{
var loDataTable = new DataTable();
var loDataColumn = new DataColumn("Eval", typeof(double), expression);
loDataTable.Columns.Add(loDataColumn);
loDataTable.Rows.Add(0);
return (double)(loDataTable.Rows[0]["Eval"]);
}
我希望它能帮助你。:) 看起来您需要一个两步的过程:首先,您需要遍历字符串表达式并将“%”替换为“/100*”,然后您可以使用Alexei的。您的意思可能是(假设运算顺序是平均数)?OP实际上是在问隐式乘法。这是一个有趣的问题。沉默的否决票和笨拙的编辑是不幸的,但这是典型的。你对被问到的问题做了很多假设,特别是考虑到有一个线程暗示
%
是一个“百分比”操作符。CodeProject项目(很糟糕)链接似乎试图解决隐式乘法问题。没有任何迹象表明OP是在追求同一件事,但我首先要的是8的百分比,它是0.16的倍数,7%3是0.21,答案是7。0336@RajbirSingh(8%2)
返回0而不是0.16。选中此项@RajbirSingh大多数编程语言中的%
运算符是模数(除法后的余数),而不是百分比。如果你想把8%2读成2的8%,那么你前面还有很多工作要做。我知道,先生,它返回8%2的模,即0,但我希望它必须使用类似百分比的值。是的,我的问题是,我不想把它读成模,而是先把它读成百分比和括号,我想用逻辑来解决括号(7+((8*2)*(7*3)))先是8*2解,然后是7*3,然后都是倍数,比如16*21=336,然后是7。在这种情况下,您有两个问题:解析代数表达式和实现隐式乘法。您需要从查找最里面的括号开始,然后递归进行。最里面的括号由一对不包含任何其他括号符号的括号符号组成。在你给出的例子中,(8*2)是最里面的括号,这并不难。你只需要找到任何表达式嵌套的最大深度。几乎只有一件事我现在想知道如何将(8%2)替换为(8*2/100)。在此之后,我的问题将得到解决。我使用了字符串生成器或替换方法,但它无法正常工作谢谢你,先生,它可以工作。但是当我操作这个3(4*2)时,它显示语法错误,如果我用“*”(”替换,那么如果我有类似3((482/100)*2)的等式,我如何检查用户输入表达式的格式是否正确创建问题请告诉我,如果有人有解决方案,你可以编辑你的原始问题,并向我们展示你迄今为止的代码吗?很可能,这只是一个调整字符串解析的问题。