如何使用一组数字和运算符进行基本的数学计算
本文关键字:计算 运算符 何使用 数字 一组 | 更新日期: 2023-09-27 18:05:13
我有一个包含5个数字的十进制类型列表:{10, 9, 100,73,3457}
。在这些数字之间,我有另外一个包含4个字符串类型运算符的列表:*
乘-
减/
除+
加。
如何获得字符串的结果?我不知道如何施加运算符优先级。
10 * 9 - 100 / 73 + 3457 = ???
这是我的代码,我正在处理的问题在完全错误的方式,它应该怎么做?
static List<decimal> numbers = new List<decimal>();
static List<string> operators = new List<string>();
foreach (decimal number in numbers)
{
foreach (string operatorz in operators)
{
resultnumber =
}
}
希望我得到了你想要的,这将使所有的数字交叉连接到他们自己,然后进入操作符。您已经列出了二进制操作符,因此我认为每个操作符需要两个操作数。结果行数为= numbers.Length * numbers.Length * operators.Length
void Main()
{
var numbers = new[] { 10, 9, 100, 73, 3457 };
var operators = new [] { "*", "+", "/", "-" };
var r = from n1 in numbers
from n2 in numbers
from op in operators
select string.Format("{0} {1} {2} = {3}",
n1, op, n2, Perform(n1, op, n2));
}
public int Perform(int val1, string @operator, int val2)
{
//main core if your question, consider to extract operators to outer level
var operators = new Dictionary<string, Func<int, int, int>>
{
{"+", (v1, v2) => v1 + v2},
{"/", (v1, v2) => v1 / v2},
{"*", (v1, v2) => v1 * v2},
{"-", (v1, v2) => v1 - v2},
};
return operators[@operator](val1, val2);
}
结果将是
10 * 10 = 100
10 + 10 = 20
10 / 10 = 1
10 - 10 = 0
10 * 9 = 90
....
不完全清楚你想要什么。但假设这些操作符位于数字之间,并解析为本机操作符优先级:简单的方法是编写脚本。您的操作符优先级将是本机的。
脚本
private static void Main(string[] args)
{
var numbers = new[]{ 10, 9, 100, 73, 3457 };
var ops = new[] { "*","-","/","+" };
if (numbers.Length != ops.Length + 1)
throw new Exception("TODO");
string statement = numbers[0].ToString();
for (int i = 0; i < ops.Length; i++)
{
statement += string.Format(" {0} {1}", ops[i], numbers[i + 1]);
}
Console.WriteLine("Statement: " + statement);
var method = String.Format(@"int Product() {{ return {0}; }} ", statement);
Console.WriteLine("Method: " + method);
var Product = CSScript.Evaluator.CreateDelegate(method);
int result = (int)Product();
Console.WriteLine(result);
}
结果:
Statement: 10 * 9 - 100 / 73 + 3457
Method: int Product() { return 10 * 9 - 100 / 73 + 3457; }
3546
Press any key to continue . . .
http://msdn.microsoft.com/fr-fr/library/s53ehcz3(v=VS.80).aspx
你可以使用你自己的类来处理计算