با سلام
این کد(متد) که براتون میذارم حاصل ضرب دو عدد دلخواه(چه کوچک و چه خیلی بزرگ) رو میده. اما اگه برای فاکتوریل میخوای از همین متد میتونی بصورت بازگشتی استفاده کنی و فاکتوریل عدد دلخواه رو حساب کنی. فقط یه کم باید خلاقیت به خرج بدی .
روی فرم دوتا تکس باکس بذار با یه لیبل و یه دکمه. زیر دکمه این متد رو فراخوانی کن و no1 , no2 همون مقادیر دوعددی هستن که از تکس باکس ها میگیری. و نتیجه (مقدار برگشتی)رو در لیبل نشون بده.
private string prod(string no1, string no2)
{
string x = "", y = "", w = "", z = "";
string res1 = "", res2 = "", res3 = "", res4 = "";
int n, m, plus = 0;
if (no1.Length <= no2.Length)
{
n = no2.Length;
}
else
{ n = no1.Length; }
if (no1.Length == 0 || no2.Length == 0)
{
return ((0).ToString());
}
else if (n < 9)
{
long mul = (long.Parse(no2)) * (long.Parse(no1));
return (mul.ToString());
}
else
{
m = n / 2;
if ((n % 2) == 0)
plus = 0;
else
plus = 1;
if ((m + 1) < no1.Length)
{
y = no1.Remove(0, m + plus);
x = no1.Remove(m + plus);
}
else
{
x = "0";
y = no1;
}
if ((m + 1) < no2.Length)
{
z = no2.Remove(0, m + plus);
w = no2.Remove(m + plus);
}
else
{
z = no2;
w = "0";
}
res1 = prod(x, w);
for (int i = 0; i < (2 * m); i++)
{
res1 = res1 + "0";
}
res2 = prod(w, y);
res3 = prod(x, z);
for (int i = 0; i < m; i++)
{
res2 = res2 + "0";
res3 = res3 + "0";
}
res4 = prod(y, z);
return sum(sum(res1, res2), sum(res3, res4));
}
}