用于循环计算阶乘

目前我有这组代码,它的目的是计算阶乘。

int numberInt = int.Parse(factorialNumberTextBox.Text); for (int i = 1; i < numberInt; i++) { numberInt = numberInt * i; } factorialAnswerTextBox.Text = numberInt.ToString(); 

由于某种原因,它不起作用,我不知道为什么。 例如,我将输入3并得到答案为-458131456,这看起来很奇怪。

任何帮助赞赏。 谢谢

 int numberInt = int.Parse(factorialNumberTextBox.Text); int result = numberInt; for (int i = 1; i < numberInt; i++) { result = result * i; } factorialAnswerTextBox.Text = result.ToString(); 

旁注:这通常不是计算阶乘的正确方法。 在开始计算之前,您需要检查输入,以防您的起始值为1或更低,在这种情况下您需要手动返回1。

另一方面注意:这也是递归方法有用的完美示例。

 int Factorial(int i) { if (i <= 1) return 1; return i * Factorial(i - 1); } 

派对有点晚了:

 Func factorial = n => n == 0 ? 1 : Enumerable.Range(1, n).Aggregate((acc, x) => acc * x); 

您可以使用此(相当优雅)的解决方案:

  Func factorial = null; factorial = x => x <= 1 ? 1 : x * factorial(x-1); int numberInt = int.Parse(factorialNumberTextBox.Text); factorialAnswerTextBox.Text = factorial(numberInt).ToString(); 
 public static int Factorial(int facno) { int temno = 1; for (int i = 1; i <= facno; i++) { temno = temno * i; } return temno; } 

使用阶乘函数:

 static long Factorial(long number) { if( number <= 1 ) return 1; else return number * Factorial(number - 1); } 

然后调用函数:

 long result = Factorial(int.Parse(factorialNumberTextBox.Text)); factorialAnswerTextBox.Text = result.ToString(); 
  int numberInt=1 ; for (int i = 1; i <= int.Parse(factorialNumberTextBox.Text); i++) { numberInt = numberInt * i; } factorialNumberTextBox.Text = numberInt.ToString(); 

试试这个,

 int numberInt = int.Parse(textBox1.Text); int answer = 1; for (int i = 1; i <= numberInt; i++) { answer = answer * i; } textBox1.Text = answer.ToString(); 

实现了两种方法: 递归基本因子计算。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication50 { class Program { static void Main(string[] args) { NumberManipulator manipulator = new NumberManipulator(); Console.WriteLine("Please Enter Factorial Number:"); int a= Convert.ToInt32(Console.ReadLine()); Console.WriteLine("---Basic Calling--"); Console.WriteLine("Factorial of {0} is: {1}" ,a, manipulator.factorial(a)); Console.WriteLine("--Recursively Calling--"); Console.WriteLine("Factorial of {0} is: {1}", a, manipulator.recursively(a)); Console.ReadLine(); } } class NumberManipulator { public int factorial(int num) { int result=1; int b = 1; do { result = result * b; Console.WriteLine(result); b++; } while (num >= b); return result; } public int recursively(int num) { if (num <= 1) { return 1; } else { return recursively(num - 1) * num; } } } } 
 static void Main() { int numberFactorial = int.Parse(Console.ReadLine()); int result = numberFactorial; for (int i = 1; i < numberFactorial; i++) { result = result * i; Console.WriteLine("{0}*{1}",numberFactorial,i); } Console.WriteLine(result); } 

我迟到了,但在这里

  public ulong Factorial(uint numb) { if (numb <= 1) return 1; ulong final = 1; for (uint i = 1; i <= numb; i++) { final *= i; } return final; } 

注意:
我使用未签名的类型来获得更好的范围
因为这计算到因子(65),而正常的签名类型将给出负值

试图为n阶乘做出更加灵活的解决方案。 这是一个保护溢出的方法,以及n的负值和零值。 使用long(而不是int)类型的结果变量允许计算“更大”的值(长期以来,您可以计算直到并包括n = 20)。

如果发生溢出,此代码返回0,但您可以将其更改为执行更合适的操作。

  static long nFactorial(int n) { if (n <= 1) { return 1; } long result = 1; try { for (int i = 1; i <= n; i++) { result = checked(result * i); } } catch (OverflowException) { return 0; } return result; } 
  public static void Main(string[] args) { string result = Convert.ToString(GetFactorial(5)); Console.WriteLine(result); } internal static int GetFactorial(int factNumber) { int factorial =1; int i = factNumber; while(factNumber>=1) { factorial = factNumber * factorial; factNumber--; } return factorial; } 

这个怎么样?

 public int FactorialFunction(int Factorial){ int Product = Factorial -1; for(int Number = Factorial - 1; Number < Factorial; Number++ ) { Factorial = Product * Factorial; Product--; } return Factorial; }