Ejemplo n.º 1
0
        public string Compute(IList <string> numbers)
        {
            if (numbers.Count > 2)
            {
                throw new Exception("Incorrect count of numbers to subtract, expecting 2, found: " + numbers.Count.ToString());
            }

            StringMatrixTransformer smt = new StringMatrixTransformer();
            NumercStringUtils       nsu = new NumercStringUtils();

            bool negateAnswer           = ReorderLargerFirst(ref numbers);
            IList <IList <int> > matrix = smt.TransformStringListToReversedIntMatrix(numbers);

            StringBuilder sb = new StringBuilder();

            int i = 0;

            for (; i < matrix[1].Count; i++)
            {
                if (matrix[0][i] < matrix[1][i])
                {
                    SetupCarryAt(matrix[0], i);
                }
                sb.Append(matrix[0][i] - matrix[1][i]);
            }

            // get the rest if there's any left in the larger number
            for (; i < matrix[0].Count; i++)
            {
                sb.Append(matrix[0][i]);
            }

            return(nsu.TrimLeadingZeros(
                       negateAnswer ?
                       "-" + smt.ReverseString(sb.ToString()) :
                       smt.ReverseString(sb.ToString())));
        }