阶乘计算器呈现的负数应为正数。怎么修?

时间:2019-02-03 22:58:11

标签: c# .net winforms

我需要编写一个高达20!的阶乘计算器 我进入了19,这很好,但是当我尝试计算20!时,它返回一个负数。
我怎样才能解决这个问题?

现在,有一些背景知识(以防万一,我完全不正确),我没有参加VB.Net课程(他们在那儿学习阶乘),所以我不知道自己在做什么。

public partial class Form1 : Form
{
    private void btnCalculate_Click(object sender, EventArgs e)
    {
        int f = 1, n, i;
        n = Int32.Parse(txtNumber.Text);
        for (i = 1; i <= n; i++)
        {
            f = f * i;
            txtFactorial.Text = f.ToString();
        }
    }
}

预期:20! = 2,432,902,008,176,640,000
实际:20! = -2102132736

2 个答案:

答案 0 :(得分:3)

对于大量数字,您可以使用BigInteger结构。

答案 1 :(得分:1)

处理大量数字时,类型 int 太小。

使用int类型时,您可以表示最大值2,147,483,647,但是您要存储的数字大于1B倍(这就是为什么它溢出并且得到错误的负数-read integer overflow)的原因。 / p>

此计算需要类型 long 。 20个就足够了!但是,如果您使用更大的数字,请使用BigInteger。

  

我到19岁就可以了

您应该再次检查该值。返回正数并不意味着它是正确的。我很确定int会在19处得到不正确的值!