0 امتیاز
من برنامه فاکتوریل رو نوشتم حالا میخوام فاکتوریل یک عدد بزرگ رو حساب کنم یعنی میخوام ورودی که دریافت میکنه هر عدد صحیح بزرگی باشه فاکتوریلش رو برام حساب کنه

2 پاسخ

0 امتیاز
سلام دوست عزیز...

فاکتوریل اعداد صحیح بزرگ  نیاز به فضای خیلی زیادی داره...طوری که توی یکی از سایت های خارجی خوندم فاگتورل عددی مثل 4294967295 به حدود 40 گیگ رم نیاز داره. پس میشه گفت که تقریبا همچین چیزی مقدور نیست.
+1 امتیاز

با سلام

این کد(متد) که براتون میذارم حاصل ضرب دو عدد دلخواه(چه کوچک و چه خیلی بزرگ) رو میده. اما اگه برای فاکتوریل میخوای از همین متد میتونی بصورت بازگشتی استفاده کنی و فاکتوریل عدد دلخواه رو حساب کنی. فقط یه کم باید خلاقیت به خرج بدی .

روی فرم دوتا تکس باکس بذار  با یه لیبل و یه دکمه. زیر دکمه این متد رو فراخوانی کن  و 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));
            }
        }

 

سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,920 کاربر

دسته بندی ها

...