c# - 为什么在这个循环中,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
解决方案
你的循环逻辑有点不对劲,所以我为你修好了:
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);
}
推荐阅读
- python - 尝试在当前文件中添加 python 文件时出错
- php - 非法字符串偏移警告 nav-menu.php
- mysql - 我应该索引具有以下两个选项之一的字段:无符号、唯一(mysql)吗?
- javascript - Express.js CRUD 应用程序错误:更新函数执行错误重定向
- jenkins - 这真的是 JUnit 报告文件吗?.Json 文件的 Jenkins 错误
- javascript - Javascript FadeToggle 无法正常工作
- javascript - 使用 async/await 有什么好处?
- vue.js - 如何将上传文件类型转换为 graphql UploadFile 类型?
- ios - 如何获取表视图是否被选为 Observable
? - c# - 如何使用 autofac 注册这个类?