我编写了一个简单的循环来获取阶乘,但是代码似乎忽略了条件(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
答案 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);
}