【问题标题】:How to multiply each number by minus the number by 1 in C#? [duplicate]如何在C#中将每个数字乘以减去该数字乘以1? [复制]
【发布时间】:2015-01-21 09:02:42
【问题描述】:

我有一个数字 10,我想将每个数字乘以减去该数字再乘以 1,如下所示:

10! = 10*9*8*7*6*5*4*3*2*1

然后是结果。 如何在 C# 中处理这个问题?

【问题讨论】:

  • 你想共同计算factorial
  • while( mul != 0 ) result *= mul--or 这样的...
  • 这在数学中称为Factorial。而这个 Google search 返回 134.000 结果。看看吧。
  • 还有一个 BigInteger.Factorial (msdn.microsoft.com/en-us/library/…)。我假设它在 BigInteger 中,而不是普通 int 数学库的一部分,因为即使是适度的参数结果也会溢出。
  • @PeterSchneider 请注意,System.Numerics.BigInteger没有Factorial()Solver Foundation 版本的 BigInteger(确实如此)需要从标准 .Net 单独下载和安装。 - 对于阶乘可能有点矫枉过正。

标签: c# multiplication


【解决方案1】:

这是一个简单的阶乘函数。您可以使用递归方法:

unsigned int Factorial(unsigned int val)
{
    return (1 == val)? 1 : Factorial(val - 1);
}

或迭代方法:

unsigned int Factorial(unsigned int val)
{
    unsigned int result = val;
    while(1 < --val)
    {
        result *= val;
    }
    return result;
}

请注意,它不适用于大输入值,因为阶乘会很快溢出整数。

【讨论】:

  • 为什么是return result -1
  • @PeterSchneider 因为我在喝咖啡之前不能打字。 :-) 感谢您指出了这一点。修好了。
  • @TimSchmelter - Factorial(50) 返回 -3258495067890909184
【解决方案2】:

试试这个 -

        var res = 1;
        for (int num = 10; num > 0; num--)
            res += res * (num - 1);

        MessageBox.Show(res.ToString());

【讨论】:

  • 虽然 OP 说的有点不清楚,但我认为该示例显示了他想要的,即计算阶乘。在这种情况下,你的一个班轮只是第一步。
  • OP 明确询问如何计算factorials。示例说明了一切。
  • 感谢大家纠正我。更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 2015-06-23
相关资源
最近更新 更多