PDA

View Full Version : کمک در رابطه با تابع فاکتوریل



mas'oud
جمعه 31 اردیبهشت 1389, 14:45 عصر
سلام
من یک برنامه ماشین حساب مهندسی دارم میسازم که یکی از توابع آن !n است.
ولی برنامه از عدد مشخصی به بالا مقدار صفر را به جای جواب در تکست باکس نمایش میدهد.مثلا فاکتوریل 120 رو صفر نشون میده اما اعدادکوچکتر مثل 5و6و10 را درست محاسبه میکند
لطفا مشکل را بگویید.


private void btnFACT_Click(object sender, EventArgs e)
{
int f = 1;
if (textBox1.Text.Contains(".") || Convert.ToInt32(textBox1.Text)<0)
{
textBox1.Clear();
MessageBox.Show("Only +Integer Number","Error",
MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{
int k = Convert.ToInt32(textBox1.Text);
for (; k > 0; k--)
{
f = f * k;
}
textBox1.Text = f.ToString();
}
}

Peyman.Gh
جمعه 31 اردیبهشت 1389, 14:59 عصر
به این علت 0 نشان میدهد چون فاکتوریل عدد 120 یک عدد بسیار بزرگ میشود.

FastCode
جمعه 31 اردیبهشت 1389, 15:10 عصر
علت صفر شدن این است که عدد حاصل در یک لحظه برابر ۰ میشه که علت اون هم unchecked بودن c# و overflow هستش.

دقیقا روی 33 این اتفاق میافته:


int n;
for(int i = 32;i!=50;i++)
{
n = 1;
for(int j = i;j != 0; j--)
{
n *= j;
if(n==0)
{
Console.Write(i);
Console.Write(":");
Console.WriteLine(j);
break;
}
}
}