PDA

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



mahdi bg
10-06-2010, 10:50
سلام
طریقه محاسبه فاکتوریل اعداد بزرگ مثلا 6 رقمی چطوریه؟
آیا راهی داره بدون فرمول n * n-1 * n-2 * ... * 2 * 1 فاکتوریل رو بدست آرود.
از چه ساختاری میشه اصتفاده کرد و الگوریتم کار چطوریه


ممنون

mdgh2010
11-06-2010, 09:42
مشکل در ذخیره ی اعداد بزرگ و ضرب اونها است. اگر نتیجه ی ضرب اعداد را به صورت آرایه ذخیره کنید و در ضرب نیز کدی را بنویسید تا این اعداد را در هم ضرب کنید مشکلی نخواهد بود. یعنی از دستور * برای ضرب اعداد بزرگ استفاده نکنید.
فرض کنید نتیجه ی ضرب اعداد قبلی در آرایه ای ذخیره شده است، عدد بعدی را با ضرب دستی (کد خودتون) در این عدد ضرب کرده و در آرایه ذخیره می کنیم.

_H2_
11-06-2010, 22:28
سلام
اگر شما از یک زبان برنامه نویسی کاملاً شی گرا با قابلیت بازتعریف اپراتورها استفاده کنید، کارتان ساده خواهد بود، کافی است یک ساختار یا کلاس جدید ایجاد کنید که بتواند اعداد بسیار بزرگ را به صورت آرایه byte یا آرایه int نگداری و ضرب کند.
بعد هم در یک حلقه ساده از ان استفاده کنید.

البته لازم به ذکر است که Microsoft .Net Framework 4 شامل همچین ساختار آماده ای به نام System.Numerics.BigInteger است که میتواند به صورت نامحدود (محدود به RAM آزاد) عددی را نگاه دارد و با چهار عملی اصلی و... پردازش کند.
نتیجتاً در زبان هایی مثل C#.Net و VB.Net و C++.Net و J#.Net و ... میتوان کدی مثل این نوشت که به سادگی بتواند فاکتوریل اعداد بسیار بزرگ را هم محاسبه کند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خود من همین دستور را همین الآن و قبل از ارسال این پست و مطلب در سایت، به سادگی و با موفقیت برای محاسبه 500000 (پانصد هزار فاکتوریل!) فاکتوریل استفاده کردم، البته کمی طول کشید تا انجام دهد ولی بدون مشکل محاسبه کرد.
محاسبات چند هزار فاکتوریل خیلی سریع تر انجام شد و اگر صبر کافی ندارید پیشنهاد میکنم اول با چند هزار فاکتوریل امتحان کنید.
حتی تا حد چند ده هزار هم در چند ثانیه انجام شد.

موفق باشید.