public static int GetPermutation(InputValues value)
 {
     var nFact = GetFactorial(value.N);
     if (nFact >= Int32.MaxValue)
         throw new Exception("Result is too large.");
     var nrFact = GetFactorial(value.N - value.R);
     return nFact / nrFact;
 }
        public ActionResult Index(FormCollection collection)
        {
            int nn, rr;
            var inputValues = new InputValues();
            string n = collection["N"];
            bool nOK = Int32.TryParse(n, out nn);
            string r = collection["R"];
            bool rOK = Int32.TryParse(r, out rr);
            if (nOK && rOK)
            {
                inputValues = new InputValues() { N = nn, R = rr };
                if (nn < rr)
                {
                    ViewBag.Result = "n cannot be less than r.";
                }
                else
                {
                    try
                    {
                        var result = 0;
                        var resultType = "";
                        var type = collection["hdnOperation"];
                        if (type.ToLower() == "per")
                        {
                            result = Calculator.GetPermutation(inputValues);
                            resultType = "P";
                        }
                        else
                        {
                            result = Calculator.GetCombination(inputValues);
                            resultType = "C";
                        }
                        ViewBag.Result = string.Format("<sub>{0}</sub>{1}<sub>{2}</sub> = {3}", nn, resultType, rr, result);
                    }
                    catch (Exception ex)
                    {
                        ViewBag.Result = ex.Message;

                    }
                }
            }
            else
            {
                ViewBag.Result = "Please enter valid numbers for N and R.";
            }

            return View(inputValues);
        }
 public static int GetCombination(InputValues value)
 {
     return GetFactorial(value.N) / (GetFactorial(value.R) * GetFactorial(value.N - value.R));
 }