یکی از مسایلی که بیشتر برنامه نویسان، دیر یا زود با آن روبه رو می شوند،
ذخیره سازی و محاسبه اعداد و ارقام بزرگ است. همان طور که می دانیم، ظرف
ذخیره سازی داده ها متناسب با حجم و میزان بزرگی ارزش داده، رشد می کند.
به طور مثال، در زبان 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
تالارهای تحت مدیریت :
مطالب عمومی کامپیوتراخبار و تکنولوژی های جدیدسیستم های عاملنرم افزارسخت افزارشبکه