使用for循环计算阶乘

15

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

int numberInt = int.Parse(factorialNumberTextBox.Text);

for (int i = 1; i < numberInt; i++)
{
  numberInt = numberInt * i;
}

factorialAnswerTextBox.Text = numberInt.ToString();

出于某种原因它不能工作,我不知道为什么。例如,我将输入3并得到答案-458131456,这似乎非常奇怪。

感谢任何帮助。


8
在循环中请使用另一个变量来替代 numberInt 的循环条件。请注意不要在循环内部改变 numberInt 变量的值。 - I4V
你正在 for 循环中更改变量 numberInt 的值,而相同的变量用于比较。 - Amar
1
此外,请注意,如果使用32位的int,您只能计算到12的阶乘。也许考虑改用64位的long。编辑:好吧,long最多只能计算到20的阶乘。:) 编辑:来试试BigInteger - Chris Sinclair
16个回答

0
 int numberInt=1 ;

            for (int i = 1; i <= int.Parse(factorialNumberTextBox.Text); i++)
            {

                numberInt = numberInt * i;
            }

            factorialNumberTextBox.Text = numberInt.ToString();

0

试试这个,

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

        textBox1.Text = answer.ToString();

0

实现了两种方法:递归和基本的阶乘计算。

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;
        }
    }
  }
}

0
一个漂亮的阶乘解决方案,为您美好的夜晚增添色彩。
int num = Convert.ToInt32(Console.ReadLine());
int fact = 1;
for (int i = num; i > 0; --i)
    fact *= i;
Console.WriteLine(fact);

-1

这个怎么样?

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

这是一种复杂的编写方式,等同于 if (Factorial == 2) { return 2; } else { return 0; }; - Andrew Morton

-1
    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;

    }

1
你应该知道,有人标记了你的回答以删除(不是我)- 可能是因为它只包含代码。你能否解释一下你的代码如何工作,并回答问题? - Wai Ha Lee
@WaiHaLee 我不认为那是唯一的原因。这个回答晚了,还有其他更好的答案,代码格式有点乱,并且使用 while 循环会比 for 循环更好。在我看来,最好删除这个回答。 - PJvG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接