首页 > 解决方案 > 为什么在这个循环中,while 条件被忽略为 n-1 值?

问题描述

我编写了一个简单的循环来获得阶乘。但是,代码似乎忽略了条件(n>=1),并且我以零作为 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

标签: c#

解决方案


你的循环逻辑有点不对劲,所以我为你修好了:

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

推荐阅读