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

نام تاپیک: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

  1. #1
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    سلام بر اساتید عزیز
    باتوجه به اینکه محاسبه فاکتوریل برای اعداد بزگتر از 170 با روش ها و انواع موجود(Double) امکان پذیر نیست
    واسه همین یه روش دیگه برای اینکار استفاده کردم که محاسبه فاکتوریل اعداد بزرگ امکان پذیره (معرف به !1000 که البته خیلی بیشتر از این رو محاسبه می کنه حوصله من تا 10.000 رو کشید! )
    با این توضیح که ماشین حساب خود ویندوز(7) بیشتر از 3248 رو نمی تونه حساب کنه!!!
    Super Factorial.rar
    انتقاد و پیشنهاد خودتون رو از من دریغ نکنید

  2. #2

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    سلام....

    ما که هر چی بالا پایینش کردیم سر در نیوردیم.
    میشه توضیح بدی چیکار کردی ؟

    پیشنهاد یه الگوریتم:

    هر عدد که تولید میشه بزاریمش توی یه آرایه.
    بعد آرایه رو چاپ کنیم.

  3. #3
    کاربر دائمی آواتار tam2145
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    اصفهان
    پست
    167

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

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

    پیشنهاد :
    بیایم بجای این که از اعداد استفاده کنیم از آرایه ها (( البته رشته هم می شود )) استفاده کنیم :
    ابتدا هر رقم یک عدد را توی ردیف و ستون جداگانه ذخیره کنیم (( مثلا 231 : 2 را به 3-0 و 3 را 2-0 و ... )) و عدد دوم را توی یک آرایه دیگر ذخیره کنیم حالا بیایم و دو عدد را با استفاده از آرایه و باز سازی عمل ضرب برای آرایه ها اون دو عدد را ضرب کنیم و عدد حاصله توی یک آرایه 3t ذخیره کنیم حالا اینو با بعدی ضرب می کنیم و نتیجه را با بعدی تا تموم ضرب ها انجام شود !!

  4. #4
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    از توجه تون ممنون

    ما که هر چی بالا پایینش کردیم سر در نیوردیم.

    میشه توضیح بدی چیکار کردی ؟
    \

    مهمترین بخش متد دومه(MultiplyListAndInt)

    این تابع یک لیست رو در یک عدد ضرب می کنه!
    در وقع من عمل ضرب سنتی رو انجام میدم!

    پیشنهاد یه الگوریتم:

    هر عدد که تولید میشه بزاریمش توی یه آرایه.
    بعد آرایه رو چاپ کنیم.
    مگه اگورتیم من مشکلی داره؟
    با روش شما هم سربار CPU و هم مقدار استفاده از حافظه به شدت بالا میره
    همون طور که دید من تنها و فقط از یک لیست استفاده کردم (کم حجمتر از این؟!!)

    اگه می خواید تک تک فاکتوریل ها رو به صورت پشت سر هم ببنید :
    در تابع Fact بعد از خط زیر(داخل حلقه):

    MultiplyListAndInt(ResultNumSet, i)


    این خطوط رو اضافه کنید:

    Dim aFact As String = ""
    For Each Digit As Byte In ResultNumSet
    aFact &= CStr(CInt(Digit))
    Next
    rtxRes.Text &=rtxRes.Text & aFact & VbNewLine



    باز اگه جایی ابهام هست من در خدمتم

  5. #5
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    نقل قول نوشته شده توسط tam2145 مشاهده تاپیک
    سلام
    من که اصلا هیچی نفهمیدم فقط هی بالا و پایین می کردم ، آخر معلوم نشد کجا محاسبه می کنه !؟
    حالا این آموزش بود فرید جون یا فقط سورس تنها ؟؟
    توضیح ........

    پیشنهاد :
    بیایم بجای این که از اعداد استفاده کنیم از آرایه ها (( البته رشته هم می شود )) استفاده کنیم :
    ابتدا هر رقم یک عدد را توی ردیف و ستون جداگانه ذخیره کنیم (( مثلا 231 : 2 را به 3-0 و 3 را 2-0 و ... )) و عدد دوم را توی یک آرایه دیگر ذخیره کنیم حالا بیایم و دو عدد را با استفاده از آرایه و باز سازی عمل ضرب برای آرایه ها اون دو عدد را ضرب کنیم و عدد حاصله توی یک آرایه 3t ذخیره کنیم حالا اینو با بعدی ضرب می کنیم و نتیجه را با بعدی تا تموم ضرب ها انجام شود !!
    عزیم مشکل دقیقا همین جاست !!!
    یعنی با پیشنهاد شما ما یه دفعه به جایی می رسیم که عدد داخل یکی از آرایه ها از حداکثر ظرفیت Double بیشتر می شه(خطای سر ریز OverFolwe!!!)

  6. #6
    کاربر دائمی آواتار tam2145
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    اصفهان
    پست
    167

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    نقل قول نوشته شده توسط Farid.N مشاهده تاپیک
    عزیم مشکل دقیقا همین جاست !!!
    یعنی با پیشنهاد شما ما یه دفعه به جایی می رسیم که عدد داخل یکی از آرایه ها از حداکثر ظرفیت Double بیشتر می شه(خطای سر ریز OverFolwe!!!)
    این مشکل پیش نمی آید :
    3 آرایه از نوع string می خواهیم که string هم تا 2 میلیارد کاراکتر هم جواب می دهد !!
    هر رقم عدد را توی یک خونه قرار می دهیم حالا می اییم و خونه هایی که با هم باید ضرب شوند را ضرب می کنیم ، یکان می دهیم توی همون خونه و دهگان و ... را توی یک متغییر ذخیره و برای ظرب بعدی نگه می داریم تا ضرب که شد با این عدد جمع شود و همون منوال !!
    حالا حاصل ضرب را توی آرایه سوم ذخیره می کنیم !! حالا اون می دیم به آرایه اولی و دومی هم عدد جدید ، حاصل به آرایه سوم و ........ !! هنوز هم اشتباه هست ؟؟؟
    یا اینکه من نمی تونم قشنگ توضیح بدهم و یا برداشت من از آرایه ها اشتباه است که نمی شه !!

  7. #7
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    نقل قول نوشته شده توسط tam2145 مشاهده تاپیک
    این مشکل پیش نمی آید :
    3 آرایه از نوع string می خواهیم که string هم تا 2 میلیارد کاراکتر هم جواب می دهد !!
    هر رقم عدد را توی یک خونه قرار می دهیم حالا می اییم و خونه هایی که با هم باید ضرب شوند را ضرب می کنیم ، یکان می دهیم توی همون خونه و دهگان و ... را توی یک متغییر ذخیره و برای ظرب بعدی نگه می داریم تا ضرب که شد با این عدد جمع شود و همون منوال !!
    حالا حاصل ضرب را توی آرایه سوم ذخیره می کنیم !! حالا اون می دیم به آرایه اولی و دومی هم عدد جدید ، حاصل به آرایه سوم و ........ !! هنوز هم اشتباه هست ؟؟؟
    یا اینکه من نمی تونم قشنگ توضیح بدهم و یا برداشت من از آرایه ها اشتباه است که نمی شه !!
    مننون خیلی قشنگ توضیح دادی
    من متوجه شدم که داری حی لقمه رو دور سرت می پیچونی
    من تقریبا دارم همین کار رو می کنم ولی لقمه رو درت گذاشتم تو دهنم

    شمت کارکرد متد MultiplyListAndInt رو متوجه شدید که دارید ازش انتقاد می می کنید؟!!
    اینا رو داشته باش تو پست بعدی توضیح می دم
    آخه باید چند تا نقاشی واستون بکشم

  8. #8
    کاربر دائمی
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    Tehran
    پست
    251

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    این سورسو پیدا کردم فکر کنم منظور دوستمون tam2145 تو همین سورس باشه...
    فایل های ضمیمه فایل های ضمیمه

  9. #9
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    تابع Fact که توضیح لازم نداره فقط لیست رو می فرسته واسه ضرب

    اما تابع MultiplyListAndInt :
    ببینید من یک لیست دارم که حاوی جواب خواهد بود
    ولی نه به صورت عدی در واقع اگر هر index لیست رو به صورت یک خانه در نظر بگیریم هر خانه نگه دارنده یک عدد از جواب(0 تا 9) خواهد بود
    اگه ما فرض کنیم که جواب نهایی 120 باشه لیست در آخر عملیات باید داری سه خانه که به ترتیب 1 و 2 و 0 هستند اگه اینا رو از ایندکس صفر پشت سر هم قرار بدیم می شه 120 یعنی جواب!

    به این تصویر دقت کنید:

    مثال رو با 5 فاکتوریل توضیح می دم
    می دونید که !5 بربر است با 2*3*4*5 البته چون یک بی تاثیره ننوشتم

    خوب در ابتدای کار لیست من دارای یک خانه با مقدار 1 است که می تونید اونو جهت راحتی 2 هم بگیرید

    حالا من می یام تو مرحله بعدی 2 رو در 3 ضرب می کنم
    جواب می شه 6 من این 6 رو با 2 موجود در لیست جایگزین می کنم(همچنان جواب داخل لیست درسته)

    نوبت میرسه به 4:
    وقتی من لیست رو در 4 ضرب کنم جواب می شه 24 ولی لیست من یک خونه داره
    همون طور که می دونید در عمل ضرب اگه عدد بزرگتر از 10 شد رقم یکان در محل خود باقی و بقیه به سمت چپ اضافه می شه و چون سمت چپ عدد از نظر ارزشی 10 برابر سمت راسته پس باید اول تقسیم بر 10 بشه بعد بره
    با این توضیحات 4 با 6 جایگزین و 2 (20 تقسیم بر 10) رو در دست داریم
    حالا این 2 رو باید چی کار کنیم؟
    وقتی از حلقه خارج شدیم چک می کنیم ببینیم چیزی در دستمون مونده یا نه اگه مونده باشه یک خانه(والبته در حالت کلی به تعداد ارقام عدد) به لیست اضافه و عدد رو انتقال می دیم

    پس الان لیست ما دو خانه داره با 2و4 که میشه 24

    اگه ما دو باره این لیست رو با روش بالا ضرب کنیم لیستمون میشه 1و2و0 یا همون جواب نهایی 120
    فقط باید توجه داشته باشد که اگه عدد انتقالی بیش از یک رقم شد باید به تعداد ارقام اون خانه اضافه بشه
    یعنی اگه لیست عدد 456789 رو نشون می ده و عدد انتقالی 123 است(بعد از تقسیم بر 10) باید بعد از جا گذاری به این شکل دربیاد
    123456789
    تا ازش های مکانی هم رعایت بشه

    بازم در خدمتم


  10. #10
    کاربر دائمی آواتار tam2145
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    اصفهان
    پست
    167

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    نقل قول نوشته شده توسط Farid.N مشاهده تاپیک
    مننون خیلی قشنگ توضیح دادی
    من متوجه شدم که داری حی لقمه رو دور سرت می پیچونی
    من تقریبا دارم همین کار رو می کنم ولی لقمه رو درت گذاشتم تو دهنم
    شمت کارکرد متد MultiplyListAndInt رو متوجه شدید که دارید ازش انتقاد می می کنید؟!!
    اینا رو داشته باش تو پست بعدی توضیح می دم
    آخه باید چند تا نقاشی واستون بکشم
    سلام فرید جون !!
    دوربین مخفی و سرکاری هست ؟؟
    خب تو که می گی راهم درسته چرا یه کاری می کنی که آدم به همین دانسته هاش چپکی بنگرد ؟؟ ها ؟؟؟
    این قدر نخند ، مرض قند می گیری ، ها !!!
    من که تا حالا باهاش دیدار نداشتم تا امروز !!
    نقاشی ؟؟ حتما نقاش هم بابا شاه توی قهوه تلخ هست ؟؟!!

  11. #11
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    نقاشی ؟؟ حتما نقاش هم بابا شاه توی قهوه تلخ هست ؟؟!!
    اگه سرت شلوغ باشه و با Paint هم بکشی ای تقریبا


    این قدر نخند ، مرض قند می گیری ، ها !!!
    من که تا حالا باهاش دیدار نداشتم تا امروز !!
    خنده بر هر درد دواست

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


    دوربین مخفی و سرکاری هست ؟؟
    خب تو که می گی راهم درسته چرا یه کاری می کنی که آدم به همین دانسته هاش چپکی بنگرد ؟؟ ها ؟؟؟
    نه جان تو فقط یه تئاتر داریم همین

    ببین می گم تو خط به خط بخون هر کدوم نفهمیدی اون خط رو واست توضیح بدم
    البته نرخ کلاس خصوصی یه کم فرق داره ها

  12. #12
    کاربر دائمی آواتار tam2145
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    اصفهان
    پست
    167

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

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

  13. #13
    کاربر جدید آواتار mostafarafinejad
    تاریخ عضویت
    بهمن 1391
    محل زندگی
    کرج
    پست
    19

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    فوق الاده بود ممنون

  14. #14

    نقل قول: سورس: محاسبه فاکتوریل اعداد بسیار بزرگ(خیلی بیشتر از !1000 ;) )

    نقل قول نوشته شده توسط فرید نجفلو مشاهده تاپیک
    از توجه تون ممنون

    \

    مهمترین بخش متد دومه(MultiplyListAndInt)

    این تابع یک لیست رو در یک عدد ضرب می کنه!
    در وقع من عمل ضرب سنتی رو انجام میدم!


    مگه اگورتیم من مشکلی داره؟
    با روش شما هم سربار CPU و هم مقدار استفاده از حافظه به شدت بالا میره
    همون طور که دید من تنها و فقط از یک لیست استفاده کردم (کم حجمتر از این؟!!)

    اگه می خواید تک تک فاکتوریل ها رو به صورت پشت سر هم ببنید :
    در تابع Fact بعد از خط زیر(داخل حلقه):

    MultiplyListAndInt(ResultNumSet, i)


    این خطوط رو اضافه کنید:

    Dim aFact As String = ""
    For Each Digit As Byte In ResultNumSet
    aFact &= CStr(CInt(Digit))
    Next
    rtxRes.Text &=rtxRes.Text & aFact & VbNewLine



    باز اگه جایی ابهام هست من در خدمتم
    بخوایم تعداد مثلا ۶ ها رو در ۱۰۰۰ فاکتوریل حساب کنیم باید چیکار کرد؟

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

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