0

بازی بزرگان

 
samsam
samsam
کاربر طلایی1
تاریخ عضویت : بهمن 1387 
تعداد پست ها : 50672
محل سکونت : یزد

بازی بزرگان

یکی از مسایلی که بیشتر برنامه نویسان، دیر یا زود با آن روبه رو می شوند، ذخیره سازی و محاسبه اعداد و ارقام بزرگ است. همان طور که می دانیم، ظرف ذخیره سازی داده ها متناسب با حجم و میزان بزرگی ارزش داده، رشد می کند. به طور مثال، در زبان c بزرگ ترین حافظه ای که برای ذخیره سازی داده ها استفاده می شود، برابر با 8 بایت است که این مقدار در کامپایلر anci c به 10 بایت افزایش پیدا کرده است. اما زمانی پیش می آید که نیاز به ذخیره سازی و محاسبه اعداد بزرگ تر از 8 بایت داریم. یکی از ساده ترین روش ها، ذخیره سازی ارقام اعداد در آرایه و انجام عملیات مورد نظر روی آرایه هاست. حالا بیایید ببینیم که چگونه 2عدد بزرگ را که در آرایه ذخیره شده اند با هم جمع کنیم. ما اعداد را به صورت آرایه ای از کاراکترها از کاربر دریافت می کنیم. برای کم شدن فضای اشغال شده از کاراکتر استفاده می کنیم و با یک تبدیل ساده، خانه های آن را به رقم مورد نظر تبدیل می کنیم. اعداد را به این صورت از کاربر دریافت می کنیم: char num1[1000],num2[1000]; std::cout «« "enter first number : " «« std::endl; std::cin »» num1; std::cout «« "enter second number : " «« std::endl; std::cin »» num2; به این نکته توجه داشته باشید که این جا اعداد ما 1000رقمی هستند و میزان حافظه اشغالی برای آن ها با کوچک تر شدن شان تغییری نمی کند، ما می توانیم با تعریف اعداد به صورت اشاره گر برای آن ها حافظه داینامیک در نظر بگیریم و هر عدد بتواند هر تعداد رقمی را که خواست داشته باشد. حالا باید 2عدد را جمع کنیم، این کار را تابعی با نام add انجام می دهد که به این صورت تعریف شده است: این تابع ابتدا طول عدد بزرگ تر را پیدا می کند، سپس اعداد را بر عکس می کند؛ اما چرا برعکس؟ کاربر عدد 12 را وارد کرده است. این عدد به این صورت در آرایه قرار گرفته است: 4خانه باقی مانده بلااستفاده هستند. ما توسط تابع reverse خانه های آرایه را جابه جا می کنیم و سپس به اندازه اختلاف طول 2عدد با طول بیشتر یا همان len در کد بالا صفر اضافه می کنیم. این کار را برای این انجام می دهیم که اگر طول 2عدد متفاوت بود، بتوان 2عدد را با هم جمع کرد (البته بدون اضافه کردن صفر هم می توانیم این کار را انجام دهیم، ولی این کار جمع کردن را ساده تر می کند). بعد از این مرحله، در حلقه for تک تک ارقام را با هم جمع می کنیم. مقدار متغییر carry مقدار رقم نقلی از جمع 2عدد حاصل است. مثلا اگر 2 با 9 جمع شود، مقدار carry برابر یک است که مقدار آن در جمع 2رقم بعدی استفاده شود. در نهایت، حاصل جمع 2عدد در آرایه num1 قرار می گیرد و سپس باید num1 نیز بر عکس شود تا حاصل، نتیجه دلخواه ما باشد. این روش، تنها یکی از روش های جمع 2 عدد بزرگ است و مفهوم جمع کاغذی را پیاده می کند.

چهار راه برای رسیدن به آرامش:
1.نگاه کردن به عقب و تشکر از خدا  2.نگاه کردن به جلو و اعتماد به خدا  3.نگاه کردن به اطراف و خدمت به خدا  4.نگاه کردن به درون و پیدا کردن خدا

پل ارتباطی : samsamdragon@gmail.com

تالارهای تحت مدیریت :

مطالب عمومی کامپیوتراخبار و تکنولوژی های جدیدسیستم های عاملنرم افزارسخت افزارشبکه

 

پنج شنبه 5 آذر 1388  10:52 AM
تشکرات از این پست
cooper
cooper
کاربر برنزی
تاریخ عضویت : شهریور 1388 
تعداد پست ها : 689
محل سکونت : سمنان

پاسخ به: بازی بزرگان

 جالب بود
Learn from yesterday, live for today,hope for tomorrow.The important thing is not to stop questioning.
Albert Einstei

 

پنج شنبه 5 آذر 1388  9:29 PM
تشکرات از این پست
دسترسی سریع به انجمن ها