نمایش نتایج 1 تا 11 از 11

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

  1. #1

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

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

  2. #2
    کاربر دائمی آواتار powerboy2988
    تاریخ عضویت
    تیر 1385
    محل زندگی
    تهران
    سن
    37
    پست
    1,301
    برنامه رو نوشتم تو تاپیک ها سرچ کنی پیداش می کنی

  3. #3
    سلام
    من هر چی گشتم چیزی پیدا نکردم
    به لیست اخرین پیغام های شما هم که رفتم به جز پیغام امروزتون پیغام دیگه ای امروز ارسال نکردید
    اخرین پیغامتون مربوط به تاپیک چند برنامه در یک برنامه بود که در اون جا چند تا کد پیدا کردم
    که همگی وقتی در کامپایلر قرار میدادم ارور میداد و اکثرا میگفتم که متغیری تعریف نشده

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

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

  4. #4
    نقل قول نوشته شده توسط yashar2012 مشاهده تاپیک
    چون بهترین نوع یادگیری نگاه کردن به کد سالم هستش
    جمله تونو اصلاح می کنم:
    چون راحت ترین نوع انجام تکالیف درسی، پیدا کردن کد آمادشه!

  5. #5
    کاربر دائمی آواتار powerboy2988
    تاریخ عضویت
    تیر 1385
    محل زندگی
    تهران
    سن
    37
    پست
    1,301

    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

  6. #6
    سلام
    خوب حالا که تیکه رو انداختی دیگه کاریش نمیشه کرد
    اما این رو بهت بگم که این کدت رو من پیدا کردم و ایراد داره چرا که بازه ای که تعیین کردی
    انقدر زیاد هستش که اررور ران تایم و حافظه میده اگر مقدار عددت رو 1000 تغییر بدی میبینی که برنامه کار میکنه تازه اگر حتی این برنامه ات کار کنه اصلا نمیتونه فاکتوریل یک عدد 20 رقمی رو حساب کنه اونم با همین کدهای ساده
    فکر کنم باید اون رو به صورت ارایه های دو بعدی و در مبنای 16 بیتی تعریفش کنی که من نمیدونم چطوری اما فکر کنم این طوری حجم داده کاهش پیدا میکنه
    در هر صورت با این حال که تیکه هم انداختی دستت درد نکنه
    راستی پاور بوی فکر کردم تو تیکه رو انداختی ولی تو نبودی چون حوصله ویرایش ندارم پس خودت جمله های من رو ویرایش شده بخون

  7. #7
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    برای محاسبه ی فاکتوریل اعداد بزرگ باید از شبیه سازی استفاده کنی!
    به این نحو که باید ارقام رو شکست ودر آرایه ذخیره کنی و عمل ضرب را با سه آرایه انجام دهی.

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

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

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

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

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

  9. #9
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    نقل قول نوشته شده توسط روح اله معینی زاده مشاهده تاپیک
    سلام
    من ضرب دو عدد n رقمی رو نوشتم. خوب این هم احتمالاً باید از همون روش استفاده کنه. فقط نکته ای که هست اینه که شما باید عدد رو در قالب رشته از کاربر بگیری (البته اگه بخوای فاکتوریل هر عددی رو حساب کنی، ولی اگه نمی‌خوای که هیچ چی).

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

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

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

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

  11. #11
    تابع بازگشتی بنویس

قوانین ایجاد تاپیک در تالار

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