C# 为什么在这个循环中,while条件被忽略为n-1值?

C# 为什么在这个循环中,while条件被忽略为n-1值?,c#,C#,我已经编写了一个简单的循环来获得阶乘。但是,代码似乎忽略了条件n>=1,并且我以0作为n!结束u 当我使用n>=2而不是n>=1时,代码可以工作 class Program { static void Main(string[] args) { int n; n = int.Parse(Console.ReadLine()); decimal factorial = 1; Console.Write

我已经编写了一个简单的循环来获得阶乘。但是,代码似乎忽略了条件n>=1,并且我以0作为n!结束u

当我使用n>=2而不是n>=1时,代码可以工作

class Program
{
    static void Main(string[] args)  
    {  
        int n;  
        n = int.Parse(Console.ReadLine());  

        decimal factorial = 1;
        Console.Write(" {0} * ", n);  

        do  
        {
            n--;
            factorial *= n;
            Console.Write(" * " + n);
        } while (n != 1);  

        Console.WriteLine("=" + factorial);    
     }  
 }  
如果我把n=10,我希望得到10*9*8*7*6*5*4*3*2*1=3628800
相反,我得到,10*9*8*7*6*5*4*3*2*1*0=0

您的循环逻辑有点不正确,所以我为您修复了它:

int n = int.Parse(Console.ReadLine()); // Maybe use int.TryParse here
decimal factorial = n;

Console.Write(n);

while (n > 1)
{
    n--;
    factorial *= n;
    Console.Write($" * {n}");
}

Console.WriteLine($" = {factorial}");
我还将在这里留下我首选的使用递归计算阶乘的方法:

public decimal CalculateFactorial(int number)
{
    if (number == 1)
        return 1;
    else
        return number * CalculateFactorial(number - 1);
}

在这段代码中,我没有看到可以忽略的n>=1语句=1是n>=1。当n=1时,循环将再次运行,因为该条件为真,它所做的第一件事是将n减少到0。条件应该是当n>1时,您也不会乘以第一个数字,因为您在使用它之前减少了n。如果你删除了n-并将while改为while-n,那么你需要在计算之后加上n-以便只计算条件所覆盖的值。我得到,10*9*8*7*6*5*4*3*2*1*0=0,这是100%不正确的。我运行了你的代码,得到了362880作为输出,而不是0。问题不在于你将它乘以0。问题是你没有把它乘以10。