private static string Run(string num1, string num2, char op) { string[] numbers = new string[] { num1, num2 }; switch (op) { case 'a': case '+': LargeNumberAdder a = new LargeNumberAdder(); return(a.Compute(numbers)); break; case 's': case '-': LargeNumberSubtractor s = new LargeNumberSubtractor(); return(s.Compute(numbers)); break; case 'x': case 'm': case '*': LargeNumberMultiplier m = new LargeNumberMultiplier(); return(m.Compute(numbers)); break; case '/': case 'd': LargeNumberDivider d = new LargeNumberDivider(); return(d.Compute(numbers)); break; default: PrintHelp(); return(""); } }
public string Compute(IList <string> numbers) { if (numbers.Count < 2) { throw new Exception("Need at least 2 numbers to multiply, found: " + numbers.Count); } StringMatrixTransformer smt = new StringMatrixTransformer(); ILargeNumberComputer a = new LargeNumberAdder(); ArithmeticUtils au = new ArithmeticUtils(); string num = numbers[0]; IList <IList <int> > matrix = smt.TransformStringListToReversedIntMatrix(numbers); for (int i = 1; i < numbers.Count; i++) { IList <int> m = matrix.ElementAt(i); ILargeNumberComputer lom = new LargeToOneNumberMultiplier(); IList <string> stageIntermediates = new List <string>(); for (int j = 0; j < m.Count; j++) { string prefix = ""; int n = m[j]; //add the 0 to handle decimal place of the multiplying number for (int k = 0; k < j; k++) { prefix += "0"; } stageIntermediates.Add(lom.Compute(new List <string>() { num, n.ToString() }) + prefix); } num = a.Compute(stageIntermediates); } return(num); }