C# 为什么在这个循环中,while条件被忽略为n-1值?
我已经编写了一个简单的循环来获得阶乘。但是,代码似乎忽略了条件n>=1,并且我以0作为n!结束u 当我使用n>=2而不是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
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。