2013-03-22 4 views
0

5 개의 숫자를 포함하는 십진수 유형 목록이 있습니다 : {10, 9, 100,73,3457}. 이 숫자들 사이에는 string 타입의 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

+0

내 자신의 코드입니다. – abazgiriabazgiri

+0

Google "skeet misc utility"- 일반 개념과 함께 잘 작동하는 환상적인 수학 연산자 라이브러리가 있습니다. 문제를 풀지는 못하지만 확실히 "utile"하십시오. – JerKimball

답변

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 . . . 
관련 문제