为什么在此循环中将while条件忽略为n-1值?

时间:2019-02-09 10:05:46

标签: c#

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

当我使用(n> = 1)而不是(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

1 个答案:

答案 0 :(得分:1)

您的循环逻辑有点差,所以我为您修复了此问题:

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