我有类似(7+((8%2)(7%3)))
的方程式。我想用bod-mas来解决这个问题:第一个括号应该在分割,多次,加法和减法后求解。
我有一个程序,用户使用工资头像基本工资等创建公式。之后我发现他们的价值就像上面的等式,现在我想解决它。
我访问了http://www.codeproject.com;他们给出了一个解决方案:
string equationString = "(7+((8%2)(7%3)))";
string explicitMultiply = equation String.Replace(")(", ")*(");
但它不起作用。为什么呢?
答案 0 :(得分:2)
((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)))
答案 1 :(得分:0)
你真的在问隐式乘法。您引用的解决方案不适用于“7(3 + 4)”等情况。只有在隐式乘法的两边都有一个括号时才会起作用。
在实践中很难实现隐式乘法。规则是说如果由于缺少运算符而导致解析失败,则应添加乘法符号。
引用的解决方案在右边,但不完整。
答案 2 :(得分:0)
如果要评估该字符串,则可以使用http://ncalc.codeplex.com/这是一个开源框架。
您也可以使用
中定义的方法对其进行评估Evaluating string "3*(4+2)" yield int 18
这就像:
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"]);
}
我希望它会对你有所帮助。 :)
答案 3 :(得分:0)
看起来您需要两个步骤:首先,您需要查看字符串表达式并替换'%'用' / 100 *'然后你可以使用阿列克谢的how to parse math expressions。