2013-03-22 18 views
0

我有一個包含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 = 
    } 
} 
+0

你真的需要一個結果計算20次,或者是循環可選? – HABO 2013-03-22 13:10:03

+0

它是我自己的代碼。 – abazgiriabazgiri 2013-03-22 13:11:19

+0

谷歌「雙向飛行實用工具」 - 埋在那裏有一個非常棒的數學運算符庫,與通用的概念非常相稱。可能無法解決你的問題,但絕對「無用」。 – JerKimball 2013-03-22 13:12:39

回答

4

希望我已經得到了你想要的東西,這將使所有數字交叉連接到它們中 - 然後進入操作符。你已經列出了二元運算符,所以我想你對每個運算符都需要兩個操作數。結果行數將是= 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 
.... 
1

尚不完全清楚你想要的東西。但是假設這些運算符位於數字之間,並且解決了本機運算符的優先級:簡單的方法是編寫腳本。您的運營商優先權將是本地的。

Scripting

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 . . .