我需要编写一个高达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
答案 0 :(得分:3)
对于大量数字,您可以使用BigInteger
结构。
答案 1 :(得分:1)
处理大量数字时,类型 int 太小。
使用int类型时,您可以表示最大值2,147,483,647,但是您要存储的数字大于1B倍(这就是为什么它溢出并且得到错误的负数-read integer overflow)的原因。 / p>
此计算需要类型 long 。 20个就足够了!但是,如果您使用更大的数字,请使用BigInteger。
我到19岁就可以了
您应该再次检查该值。返回正数并不意味着它是正确的。我很确定int会在19处得到不正确的值!