public static Polynomial operator *(Polynomial a, Polynomial b)
        {
            uint maxPower = a.MaxPower + b.MaxPower;
            List<Mononomial> mononomials = new List<Mononomial>();

                foreach (var mononomialA in a.Mononomials)
                {
                    foreach (var mononomialB in b.Mononomials)
                    {
                        decimal tempCoeff = mononomialA.Coefficient;
                        tempCoeff *= mononomialB.Coefficient;
                        uint tempPow = mononomialA.Power + mononomialB.Power;

                        mononomials.Add(new Mononomial(tempCoeff, tempPow));
                    }
                }
            mononomials = mononomials.Where(x => x != null).ToList();
            string literal = (a.Literal == b.Literal) ? b.Literal : a.Literal + b.Literal;

            Polynomial result = new Polynomial(literal);
            result.AddMononomials(mononomials);
            return result;
        }
        static void Main(string[] args)
        {
            Polynomial a;
            Polynomial b;

            a = new Polynomial("x");
            a.AddMononomial(new Mononomial(4, 2));
            a.AddMononomial(new Mononomial(-3, 1));
            a.AddMononomial(new Mononomial(2, 0));

            b = new Polynomial("x");
            b.AddMononomial(new Mononomial(5, 2));
            b.AddMononomial(new Mononomial(2, 1));
            b.AddMononomial(new Mononomial(-7, 0));

            PrintResult(a, b, Operation.Addition);

            a = new Polynomial("x");
            a.AddMononomial(new Mononomial(8, 2));
            a.AddMononomial(new Mononomial(2, 1));

            b = new Polynomial("x");
            b.AddMononomial(new Mononomial(10, 2));
            b.AddMononomial(new Mononomial(2, 1));
            b.AddMononomial(new Mononomial(-9, 0));

            PrintResult(a, b, Operation.Substraction);

            a = new Polynomial("x");
            a.AddMononomial(new Mononomial(3, 1));
            a.AddMononomial(new Mononomial(2, 0));

            b = new Polynomial("x");
            b.AddMononomial(new Mononomial(9, 2));
            b.AddMononomial(new Mononomial(-6, 1));
            b.AddMononomial(new Mononomial(4, 0));

            PrintResult(a, b, Operation.Multiplication);
        }
 private static void PrintResult(Polynomial a, Polynomial b, Operation operation)
 {
     Console.WriteLine("A = " + a);
     Console.WriteLine("B = " + b);
     switch (operation)
     {
         case Operation.Addition:
             Console.WriteLine("A + B = " + (a + b) + Environment.NewLine);
             break;
         case Operation.Substraction:
             Console.WriteLine("A - B = " + (a - b) + Environment.NewLine);
             break;
         case Operation.Multiplication:
             Console.WriteLine("A * B = " + (a * b) + Environment.NewLine);
             break;
         default:
             break;
     }
 }
        public static Polynomial operator -(Polynomial a, Polynomial b)
        {
            Polynomial negativeB = new Polynomial(b.Literal);
            foreach (var mononomial in b.Mononomials)
            {
                negativeB.AddMononomial(new Mononomial(-mononomial.Coefficient, mononomial.Power));
            }

            Polynomial result = a + negativeB;
            return result;
        }
        public static Polynomial operator +(Polynomial a, Polynomial b)
        {
            if (!a.HasAnyMononomials() || !b.HasAnyMononomials())
            {
                throw new ArgumentNullException("polynomial", "Both polynomials must have at least one mononomial.");
            }

            uint maxPower = Math.Max(a.MaxPower, b.MaxPower);
            List<Mononomial> mononomials = new List<Mononomial>();

            for (uint pow = 0; pow <= maxPower; pow++)
            {
                decimal tempCoeff = 0.0m;
                tempCoeff += a.Mononomials.Where(x => x.Power == pow).Select(x => x.Coefficient).ToArray().Sum();
                tempCoeff += b.Mononomials.Where(x => x.Power == pow).Select(x => x.Coefficient).ToArray().Sum();
                mononomials.Add(new Mononomial(tempCoeff, pow));
            }
            mononomials = mononomials.Where(x => x != null).ToList();
            string literal = (a.Literal == b.Literal) ? b.Literal : a.Literal + b.Literal;

            Polynomial result = new Polynomial(literal);
            result.AddMononomials(mononomials);
            return result;
        }