PDA

View Full Version : توان با استفاده از ماتريس!



the-undertaker
دوشنبه 18 اردیبهشت 1391, 19:22 عصر
سلام بر اساتيد، دوستان و مخ هاي برنامه نويسي...
استادمون يه برنامه داده كه يه عددي مثل 999 رو بگيره و به تواني مثل 999 برسونه. مشخصا اين با int و long int جواب نميده و بايد براش از آرايه ها استفاده كرد.يه كمكي ميكنيد به من؟ لطفا قبل از برنامه الگوريتمشو برام بنويسيد چون ميخوام خودم بنويسمش. :چشمک:
يه چندتا برنامه داده نوشتم حالا جو گرفتتم كه واسه خودم بيل گيتسي بودم و خبر نداشتم. خلاصه داغم ديگه!!!:قهقهه:
ميخوام برنامه رو خودم بنويسم ولي اگه نتونستم باز مزاحم شما دوستان ميشم.
با تشكر

Ananas
دوشنبه 18 اردیبهشت 1391, 23:17 عصر
سلام.
آفرین مطمئن باش میتونی. 999 به توان 999 رو به نظرم بهتره با اعشار انجام بدی از نظر زیاد شدن ارقام منظورمه یعنی مثلا تعداد رقمها یا همون عناصر آرایه از یه حدی بیشتر نشه مثلا 100 رقم. ولی میشه به صورت عدد صحیح هم انجام داد. به ضرب دوران ابتدایی فکر کن همون کار رو با آرایه ای از int که همون رقم های 0 تا 9 هستن انجام بده. مثلا 999 یه آرایه ی 3 عضوی هست که به تعداد عضو هاش باید حلقه تکرار بشه و تو 999 ضرب بشه و هر بار یه صفر به اول اضافه شه بعد همه ی آرایه ها با هم جمع شن. این عمل ضرب. میتونی 999 بار عمل ضرب رو انجام بدی تا به توان 999 رسونده باشی. اگه بخوای سریعتر بشه لازمه غیر از ضرب و جمع تقسیم و اینجور چیزارم براش تعریف کنی تا از روش های سریعتری کار انجام بشه یعنی برای به توان رسوندن 999 بار ضرب نکنی مثلا با نهایتا 20 بار ضرب به جواب برسی با استفاده از به توان 2 رسوندن عدد به توان 2 رسیده به طور مکرر تو یه حلقه البته این وسطا یه کارهای دیگم باید انجام بشه. فرمولشو تو سایت نوشته بودم اگه خواستی یه بار دیگه مینویسم البته با long double.
نکته دیگه اینکه وقتی یه عدد قراره تو یه عدد دیگه ضرب بشه حاصلش آرایه چند عضویه؟ معمولا جمع تعداد ارقام عدد اول و تعداد ارقام عدد دوم حالا ممکنه بسته به شرایط یکی کمتر. و اگه تو عمل ضرب رقمی صفر بود می تونی ازش بگذری چون تو محاسبات بی تاثیره و هر کجا عدد 1 داشتی میتونی ارقام همون آرایه رو استفاده کنی ولی با مقدار offset ثابت.در کل بهترین کار اینه که وقتی مثلا دو تا عدد رو ضرب میکنی و داری رقم به رقم عمل میکنی وقتی رقمی رو مثلا ،3 در عدد (همون آرایه) ضرب کردی دوباره که به 3 رسیدی اونو ضرب نکنی بلکه از همون آرایه که تو 3 اول بدست آوردی استفاده کنی ولی با یک Offset مناسب. چرا؟ چون 30 ضرب در یک عدد فرقش با 300000 ضرب در همون عدد چیه؟ فرقش اینه که همون ارقام بدست میان ولی چندتا به سمت چپ منتقل میشن و در واقع سمت راست صفر اضافه میشه. شما لازم نیست آرایه رو دوباره از اول تا آخرش طی کنی و عددا رو به چپ ببری بلکه موقع استفاده از آرایه باید فاصله ی 30 با 300000 که 4 تا صفر هست رو تو اندیس آرایت تاثیر بدی یعنی اگه داشتی a[23] o حالا بنویسی a[23 - 4] o یا همچین چیزی. یعنی غیر از 0 شما 9 حالت بیشتر نمیخوای تا یک رقم در یک عدد طولانی از نظر رقم، ضرب بشه.