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

نام تاپیک: عملیات روی اعداد بزرگ

  1. #1
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476

    عملیات روی اعداد بزرگ

    سلام ...
    من در این مورد زیاد سورس دیدم در حالت های زیاد ولی اکثرا با آرایه ها و vector ها کار کرده بودن
    ولی مثالی با Pointer ها پیدا نکردم شاید هم هنوز موضوع زیاد برام مشخص نیست .
    اگه میشه در مورد الگوریتم کار دستم نیومده یه توضیحی در این مورد .
    اگر یه کد بهینه و خوب هم باشه ممنون میشم .

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    تو بخش ساختمان داده ها یه جست و جو کن. زیاد در موردش صحبت شده. البته سورسی که با اشاره گر ها باشه نمیدونم هست یا نه ولی فکر کنم الگوریتم رو متوجه بشی

  3. #3
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476
    سلام ... دیدم ولی همه سوال داشتن کسی راهنمایی مفیدی نکرده بود (با احترام به کسایی که سعی در راهنمایی داشتن)

  4. #4
    کاربر جدید آواتار rahgozare_abi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    سبز سبز
    پست
    9

    Wink

    سلام دوست خوبم

    به سه لینک زیر یک سری بزن ، کمکت می کنه

    http://www.shoup.net/ntl/index.html
    http://www.aachp.blogfa.com/cat-2.aspx
    http://www.lahijancity.com/modules.p...=381&highlight=
    آخرین ویرایش به وسیله rahgozare_abi : شنبه 15 دی 1386 در 14:10 عصر دلیل: تکمیل

  5. #5
    ولی مثالی با Pointer ها پیدا نکردم شاید هم هنوز موضوع زیاد برام مشخص نیست
    خوب از انجایی که vector کار را راحت تر می کنند و جز استاندارد ها هم هستند ، بنابراین چه لزومی دارد که کار را برای خودمان سخت تر کنیم و مستقیما با pointer ها ایجاد کنیم؟
    vector ها و سایر کلاس های مانند آن ، از همان اشاره گر ها استفاده کرده اند (و البته با همان قدرت کنترل)، دلیل شما برای استفاده از pointer ها چیست ؟

    اگر کد بهینه می خواهید چرا از کتابخانه های open source که فراوان هم هستند ، استفاده نمی کنید :
    مثل: big number library , NTL , apfloat , GMP

    http://gmplib.org/ :GMP
    http://www.shoup.net/ntl/index.html :NTL
    http://www.apfloat.org/ :apfloat

    برای لیستی از سایر کتابخانه ها:
    http://www.dmoz.org/Science/Math/Num...eory/Software/

  6. #6
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476
    نقل قول نوشته شده توسط Nima_NF مشاهده تاپیک
    vector ها و سایر کلاس های مانند آن ، از همان اشاره گر ها استفاده کرده اند (و البته با همان قدرت کنترل)، دلیل شما برای استفاده از pointer ها چیست ؟

    Big Number library
    سلام ... دلیل خاصی ندارم شاید فضولی ;)
    بابت مثال ها هم ممنون من هنوز درگیر الگوریتم و نمونه کدهایی که از سایت گرفتم هستم
    فک کنم هنوز کمی زود باشه برای این موضوعات

  7. #7
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476
    با راهنمایی یکی از دوستان جمعش رو نوشتم ولی برای تفریق عددی مثل
    92345 - 54329
    یا ضرب و تقسیم اگه لطف کنید فقط راهنمایی کنید ممنون میشم تا خودم سعی کنم بنویسم

  8. #8
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476
    اینو از یکی از پست های توی همین سایت گرفتم ولی جای Sample ش خالیه چون نتونستم باحاش کار کنم
    این خطایی هست که میده ،توی VC++‎ 6


    --------------------Configuration: HI - Win32 Debug--------------------
    Compiling...
    HI.Cpp
    c:\program files\microsoft visual studio\vc98\include\stdio.h(82) : warning C4067: unexpected tokens following preprocessor directive - expected a newline
    HugeInt.cpp
    c:\program files\microsoft visual studio\vc98\include\stdio.h(82) : warning C4067: unexpected tokens following preprocessor directive - expected a newline
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(300) : error C2374: 'i' : redefinition; multiple initialization
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(294) : see declaration of 'i'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(324) : error C2374: 'i' : redefinition; multiple initialization
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(294) : see declaration of 'i'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(465) : error C2248: 'minusflag' : cannot access private member declared in class 'HugeInt'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.h(146) : see declaration of 'minusflag'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(471) : error C2248: 'integer' : cannot access private member declared in class 'HugeInt'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.h(145) : see declaration of 'integer'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(479) : error C2248: 'integer' : cannot access private member declared in class 'HugeInt'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.h(145) : see declaration of 'integer'
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(488) : error C2086: 'i' : redefinition
    c:\documents and settings\majid\desktop\hugnumber\hugeint.cpp(493) : error C2593: 'operator >>' is ambiguous
    Error executing cl.exe.

    HI.exe - 7 error(s), 2 warning(s)

    فایل های ضمیمه فایل های ضمیمه

  9. #9
    کاربر جدید آواتار daniel1
    تاریخ عضویت
    آذر 1386
    محل زندگی
    ایران
    پست
    9

    برای تفریق

    سلام
    ان شاء الله بتونم کمکتون کنم
    آفرین بر شما که تابع جمعش رو نوشتین میتونیم با استفاده از اون بقبه رو بنویسیم
    برای تفریق :
    الگوریتمش شبیه به جمعه تفاوتش در منفی بودن عدد دوم یا اوله
    باید توی همون تابع جمعتون اول ورودی رو چک بکنید اگه منفی بود به جای جمع اعداد تفریق بشند .کار درست اینه که یک تابع بنویسید که اعداد ورودی رو با هم مقایسه کنه هرکدوم بزگتر بود دیگری رو ازش کم کنه و اگه عدد دوم بزرگ تر بود موقع چاپ یه علامت منفی قبل از نتیجه چاپ بکنه .

  10. #10
    کاربر جدید آواتار daniel1
    تاریخ عضویت
    آذر 1386
    محل زندگی
    ایران
    پست
    9
    دیگر اینکه اگر بخواهید از اشاره گر ها استفاده بکنید یا اصلا بخواهید از victor ها استفاده نبرید پیشنهاد های من رو بخونید:
    1) از string استفاده ببرید یعنی با ورودی نه به عنوان یک عدد بلکه به عنوان یک رشته برخورد بکنید این کار یک سری کمک های خوب به شما میکنه اول اینکه از توابه این فایل سرآیند میتونید بهره ببرید(مثلا برای تشخیص عدد بزرگتر ) دوم با کم کردن یک '0'از رشته ی مثلا 2 میتونید اون رو به عدد 2 تبدیل کنید . کار با این مورد مثل استفاده از آریه ای از کاراکترهاست فقط خیلی ساده تره.
    2)استفاده از link list برای استفاده ی مستقیم از اشاره گر ها فقط یکم دردسرتون زیاد تر میشه.
    3)استفاده از char * این مورد مثل مورد اوله فقط کار بیشتری می بره.
    این برنامه رو این ترم به ما گفتند بنویسیم برای درس ساختمان داده برای همین روش خیلی فکر کردم خودم از مورد اول استفاده کردم و زودتر از همه تحویل دادم.

  11. #11
    کاربر جدید آواتار daniel1
    تاریخ عضویت
    آذر 1386
    محل زندگی
    ایران
    پست
    9
    برای تابع ضرب دو تا پیشنهاد دارم :
    1)مثل ابتدایی که بهمون یاد دادن اول دونه دونه اعداد رو از عدد دوم در همه ی اعداد عدد دوم ضرب کنید و اعداد حاصله رو در یک آرایه از رشته ها ( یا هر جور دیگه ای که میدونید ) ذخیره کنید سپس با تابع جمعتون اونها رو با هم جمع کنید و نتیجه ی حاصله رو چاپ کنید .یادتون باشه که اگه عدد سوم از عدد دوم رو در اولی ضرب میکنید باید 2 تا صفر اول کار بگذارید.
    2)این روش بدون تابع جمعه و در اون این دو تابع تلفیق میشن یعنی بعد از ضرب عدد اول از عدد دوم در همه ی اعداد عدد اول یک شیفت به چپ بکنید (عدد آخری از نتیجه هیچ وقت تغییر نمیکنه) و سری جدید اعداد رو با اعداد قبلی جمع و به جای اون ها در رشته ی جدید قرار بدید.این روش یکم بیشتر کار می بره اما در عوض استک مون آورفلو نمیشه من خودم از این روش استفاده کردم .

    تابع ضرب رو که نوشتید بفرمائید تا براتون فاکتوریل رو توضیح بدم . اگه نتونستید هم بفرمائید تا یا راهنمایی بیشتری بکنم یا برنامه رو براتون ارسال کنم .
    روی روش های دیگه هم فکر کید.

    mhe93@yahoo.com

  12. #12
    کاربر جدید آواتار daniel1
    تاریخ عضویت
    آذر 1386
    محل زندگی
    ایران
    پست
    9
    و اما error ها :
    اون قبلی توی ویژوال استادیو یه 2005 نوشته اما شما با C++‎ 6 یا بورلند کار کردید (البته این جور به نظر میرسه)
    در ویژوال 2005 حوزه ی دید متغبر های دستور for فقط تا آخر دستوره اما در 6 این جور نیست و متغیر هر جایه تابع تعریف بشه حوزه ی دیدش تمام تابع (از تعریف به بعد ) هست برای همین به شما میگه قبلا i رو تعریف کردید . پیشنهاد میکنم i رو به q یا غیره (در موارد ایراد زا ) تغییر بدید .
    ب تشکر
    محمد حسین

  13. #13
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476
    نقل قول نوشته شده توسط daniel1 مشاهده تاپیک
    و اما error ها :
    اون قبلی توی ویژوال استادیو یه 2005 نوشته اما شما با C++‎ 6 یا بورلند کار کردید (البته این جور به نظر میرسه)
    در ویژوال 2005 حوزه ی دید متغبر های دستور for فقط تا آخر دستوره اما در 6 این جور نیست و متغیر هر جایه تابع تعریف بشه حوزه ی دیدش تمام تابع (از تعریف به بعد ) هست برای همین به شما میگه قبلا i رو تعریف کردید . پیشنهاد میکنم i رو به q یا غیره (در موارد ایراد زا ) تغییر بدید .
    ب تشکر
    محمد حسین
    ممنون دوست عزیز از راهنمایی هاتون اون سورس و با DevC++‎ تونستم CompiE کنم ولی جالب اینجاست که تقسیم خیلی بد عمل می کنه
    ممکنه اعداد اعشاری باشن برای این موضوع راهی به نظرتون میرسه ???

  14. #14
    سلام به دوستان
    با تشکر از توجهتون به این موضوع
    من چند تا پیشنهاد در این مورد دارم
    1-در مورد تابع فاکتور به صورت زیر هم میشه عمل کرد ولی متاسفانه رو اعداد بزرگ جواب نمیده
    2-میتونیم با استفاده از ریاضیات، مقدار تقریبی مثلا 502136 * 133652 رو بدست بیاریم و با استفاده از روش نماد علمی و تابع pow حاصل رو برگردونیم
    در این صورت نتیجه ی برگشتی میتونه تا 10 به توان304 هم بزرگ باشه
    ولی ایرادی که داره اینه که یه مقدار تقریب توی کار میآد

  15. #15
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476
    سلام تقریبا نوشتم ولی اعداد اعشاری و یه راهنمایی بکنید

  16. #16
    کاربر جدید آواتار daniel1
    تاریخ عضویت
    آذر 1386
    محل زندگی
    ایران
    پست
    9
    با سلام مجدد
    برای تقسیم :
    میتونید از تفریق استفاده کنید برای اینکه جواب اعشار داشته باشید در پایان کار در خروجی / رو چاپ کنید .
    من ساده تر از این به ذهنم نمیرسه راه هایدیگه ای هم هست .
    راستی اگه ضرب رو کامل نوشتید بفرمائید تا براتون فاکتوریل رو بگذارم.

  17. #17
    کاربر جدید آواتار daniel1
    تاریخ عضویت
    آذر 1386
    محل زندگی
    ایران
    پست
    9
    روی تقسیم بیشتر فکر کنید اگه طرحی به نظرتون رسید به ما هم بگید ممنون میشم.

  18. #18
    کاربر دائمی آواتار ICEMAN
    تاریخ عضویت
    تیر 1383
    محل زندگی
    Hyper-V
    پست
    476
    نقل قول نوشته شده توسط daniel1 مشاهده تاپیک
    با سلام مجدد
    برای تقسیم :
    میتونید از تفریق استفاده کنید برای اینکه جواب اعشار داشته باشید در پایان کار در خروجی / رو چاپ کنید .
    من ساده تر از این به ذهنم نمیرسه راه هایدیگه ای هم هست .
    راستی اگه ضرب رو کامل نوشتید بفرمائید تا براتون فاکتوریل رو بگذارم.
    منظورتون و واضح تر میگین

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

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