ورود

View Full Version : فاکتوریل یک عدد 20 رقمی را چطور میتوان محاسبه کرد البته در زبان C



yashar2012
یک شنبه 26 آذر 1385, 02:49 صبح
سلام
خسته نباشید
من میخواستم از استاتید بخوام که فاکتوریل یک عدد 20 رقمی رو برنامه اش رو بنویسند
البته اگر فقط فاکتوریل عدد 20 رقمی باشد اشکالی ندارد فقط خواهشا کدش رو قرار بدن
چون بهترین نوع یادگیری نگاه کردن به کد سالم هستش
همچنین کدهایی که میخواید قرار بدید رو به صورت کامل و با نوشتن حتی هدرها قرار بدید
چرا که من تازه دارم سی یاد میگیرم و نیاز دارم همه چیز کامل باشه تا بتونم یاد بگیرم

powerboy2988
یک شنبه 26 آذر 1385, 05:52 صبح
برنامه رو نوشتم تو تاپیک ها سرچ کنی پیداش می کنی

yashar2012
یک شنبه 26 آذر 1385, 07:12 صبح
سلام
من هر چی گشتم چیزی پیدا نکردم
به لیست اخرین پیغام های شما هم که رفتم به جز پیغام امروزتون پیغام دیگه ای امروز ارسال نکردید
اخرین پیغامتون مربوط به تاپیک چند برنامه در یک برنامه بود که در اون جا چند تا کد پیدا کردم
که همگی وقتی در کامپایلر قرار میدادم ارور میداد و اکثرا میگفتم که متغیری تعریف نشده

خواهشا اگر کسی هست که بتونه فاکتوریل یک عدد 20 رقمی رو محاسبه کنه
ان هم فقط به زبان سی لطفا به من بد بخت کمک کنه
در ضمن خواهشا کدها رو خودتون قبلش در turbo c++ یا هر برنامه ای که استفاده میکنید کامپایال کنید تا مشکلی نداشته باشه

ممنون راستی اقای پاوربوی اگر میشه یک بار دیگه برنامه رو بنویسید و در این جا قرار بدید
خیلی ممنون

hasina
یک شنبه 26 آذر 1385, 10:05 صبح
چون بهترین نوع یادگیری نگاه کردن به کد سالم هستش


جمله تونو اصلاح می کنم:
چون راحت ترین نوع انجام تکالیف درسی، پیدا کردن کد آمادشه!

powerboy2988
یک شنبه 26 آذر 1385, 10:11 صبح
include <iostream.h>#
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

main()
{
int m[4000],i,num;
long double fact;

for(i=1;i<4000;i++)
m[i]=i;
cout<<"please enter your number for Fact";
cin>>num;
fact=1;
for(i=1;i<=num;i++)
fact=fact*m[i];
cout<<fact;
getch();
return 0

yashar2012
یک شنبه 26 آذر 1385, 14:16 عصر
سلام
خوب حالا که تیکه رو انداختی دیگه کاریش نمیشه کرد
اما این رو بهت بگم که این کدت رو من پیدا کردم و ایراد داره چرا که بازه ای که تعیین کردی
انقدر زیاد هستش که اررور ران تایم و حافظه میده اگر مقدار عددت رو 1000 تغییر بدی میبینی که برنامه کار میکنه تازه اگر حتی این برنامه ات کار کنه اصلا نمیتونه فاکتوریل یک عدد 20 رقمی رو حساب کنه اونم با همین کدهای ساده
فکر کنم باید اون رو به صورت ارایه های دو بعدی و در مبنای 16 بیتی تعریفش کنی که من نمیدونم چطوری اما فکر کنم این طوری حجم داده کاهش پیدا میکنه
در هر صورت با این حال که تیکه هم انداختی دستت درد نکنه:لبخند:
راستی پاور بوی فکر کردم تو تیکه رو انداختی ولی تو نبودی چون حوصله ویرایش ندارم پس خودت جمله های من رو ویرایش شده بخون

dkhatibi
یک شنبه 26 آذر 1385, 21:21 عصر
برای محاسبه ی فاکتوریل اعداد بزرگ باید از شبیه سازی استفاده کنی!
به این نحو که باید ارقام رو شکست ودر آرایه ذخیره کنی و عمل ضرب را با سه آرایه انجام دهی.

البنه لازم است بگویم که فاکتوریل یک عدد 20 رقمی آنقدر بزرگ می شه که نگو.
من با 30 فقط تونستم تا 4800 فاکتوریل را حساب کنم که اون در حدود 32000 رقم داشت. حالا دیگه 20 رقمیش بماند شاید نردیک به 10000000 رفم داشته باشه!

روح اله معینی زاده
چهارشنبه 29 آذر 1385, 08:18 صبح
سلام
من ضرب دو عدد n رقمی رو نوشتم. خوب این هم احتمالاً باید از همون روش استفاده کنه. فقط نکته ای که هست اینه که شما باید عدد رو در قالب رشته از کاربر بگیری (البته اگه بخوای فاکتوریل هر عددی رو حساب کنی، ولی اگه نمی‌خوای که هیچ چی).

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

و اما این که این مسأله چه طوری باید حل بشه به عهده‌ی خودتون (دارم می‌رم کلاس و با عرض پوزش وقت زیادی برای فکر کردن ندارم). ولی اگه ضرب دو عدد n رقمی رو خواستید، از طریق email خبرم کنید تا براتون بفرستم (اگه اشاره‌گر هم نخوندید که بی خیال email زدن شید).

با احترام- خدانگهدار

dkhatibi
پنج شنبه 30 آذر 1385, 13:44 عصر
سلام
من ضرب دو عدد n رقمی رو نوشتم. خوب این هم احتمالاً باید از همون روش استفاده کنه. فقط نکته ای که هست اینه که شما باید عدد رو در قالب رشته از کاربر بگیری (البته اگه بخوای فاکتوریل هر عددی رو حساب کنی، ولی اگه نمی‌خوای که هیچ چی).

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

و اما این که این مسأله چه طوری باید حل بشه به عهده‌ی خودتون (دارم می‌رم کلاس و با عرض پوزش وقت زیادی برای فکر کردن ندارم). ولی اگه ضرب دو عدد n رقمی رو خواستید، از طریق email خبرم کنید تا براتون بفرستم (اگه اشاره‌گر هم نخوندید که بی خیال email زدن شید).

با احترام- خدانگهدار

می دونی در محاسبه ی فاکتوریل اعداد بزرگ حتتی بزرگتر از 5000 مشکل چیه؟
مشکل اینه که تو داس بعد آرایه رو نمی تونیم بیش از 16000 بدیم وگرنه با خطا مواجه می شیم.
اما این هم قابل حله ولی با ...
روش کار می تونه این باشه که از فایل به جای آرایه استفاده کرد.در این صورت این محدودیت هم از بین می ره. اما مطمئنا سرعت محاسبه حیلی پایین حواهد بود.

اکبر آقا
سه شنبه 17 بهمن 1385, 09:48 صبح
می دونی در محاسبه ی فاکتوریل اعداد بزرگ حتتی بزرگتر از 5000 مشکل چیه؟
مشکل اینه که تو داس بعد آرایه رو نمی تونیم بیش از 16000 بدیم وگرنه با خطا مواجه می شیم.
اما این هم قابل حله ولی با ...
روش کار می تونه این باشه که از فایل به جای آرایه استفاده کرد.در این صورت این محدودیت هم از بین می ره. اما مطمئنا سرعت محاسبه حیلی پایین حواهد بود.

با عرض معذرت اولا اینکه من خودم در C آرایه 60000 درایه ای ایجاد و حتی استفاده کرده ام ثانیا برای اینکه محدودیت ارقام را از بین ببریم، می توانیم از آرایه پویا به جای آرایه معمولی استفاده کنیم که در این صورت حتی فاکتوریل اعدادی مانند 5000 و 10000 را نیز هرچند که زمانبر باشد محاسبه کنیم..

mhd2mehdi
جمعه 11 اسفند 1385, 23:35 عصر
تابع بازگشتی بنویس