PDA

View Full Version : تبدیل مبنا



mina.m
شنبه 13 خرداد 1385, 03:09 صبح
با سلام

اگر بخواهم عددی را از ورودی دریافت کنم با هر مبنای دلخواهی و سپس از سیستم بخواهم که دو برابر این عدد را با به مبنای خواسته شده ببرد ( هر مبنایی) , آیا باید ابتدا عدد را از مبنایی که دارد به مبنای 2 ببرم و سپس آن را دو برابر کرده و از مبنای 2 به مبنای مورد نظر ببرم ؟
به نظر شما الگوریتم من درست است ? ممنون می شوم الگوریتم پیشنهادیتان را بگویید .

با تشکر از لطفتان

raha_hakhamanesh
شنبه 13 خرداد 1385, 14:07 عصر
با سلام
تنها مزیتی که مبنای 2 دارد اینست که برای 2برابر کردن نیاز به محاسبه نداریم و فقط کافیست عدد مورد نظر را یک بار به سمت چپ شیفت دهیم و این به لحاظ اجرای زمانی خیلی خوب است و ظاهرا ایده بدی هم نیست من هم منتظر پاسخ سایر دوستان هستم

mina.m
چهارشنبه 17 خرداد 1385, 21:37 عصر
از راهنماییتان ممنونم .

lajevardi
یک شنبه 11 تیر 1385, 17:47 عصر
این فکر قشنگیه که با شیفت به چپ، عدد رو دو برابر کنین ولی مبنای 2 به هیچ وجه پل مناسبی برای تغییر مبنا نیست.
دو برابر عدد ورودی شما، در مبنای b1 باید تبدیل بشه به عددی در مبنای b2. به نظر من مبنای 10 میتونه پل خوبی برای تغییر مبنا باشه، بشدت کار رو ساده میکنه و از شر تغییر مبنای مستقیم هم راحت میشین.
شما بهینه سازی ای رو که با انجام شیفت در مبنای 2 انجام میدی با یه تغییر مبنای اضافه از دست میدی. استفاده از شیفت به قیمت تغییر مبنا به صرفه نیست.
مطمئنا" این الگوریتم در شرایط خاص بشدت بهینه ست، به طور کلی زمانی که مبنای مبدا یا مقصد یا هر دو اعدادی مثل 2، 8، 16،... باشن.
خلاصه کنم، اگر مبناهای مبدا و مقصد رو چک کنید و به ازای ورودی ها الگوریتم های متفاوتی داشته باشین، بهینه ترین روش رو از نظر من انتخاب کردین. مسلما" وقت بیشتری برای کدنویسی میطلبه.

msnasiri
دوشنبه 12 تیر 1385, 21:33 عصر
به نظر من هم باید یه رشته از اعداد بگیری و با یه حلقه اگر به 0dh رسید حلقه به پایان برسه.
و در هر مرحله 30h از شون کم بشه تا خود عدد بدست بیاد و با استفاده از تقسیم و ضرب های متوالی به مبنای دوم تبدیل کنی.

Younes
سه شنبه 13 تیر 1385, 10:14 صبح
با سلام
کار با مبنای 2 به این سادگی ها هم نیست زیرا اگر منفی باشد شیفت به سمت چپ بیت علامت را از بین میبرد و جواب غلط میشود. در نتیجه بنظر من هم جواب lajevardi کاملترین و بهترین پاسخ است. ( هر چند که بنظر می اید سوال کننده اول مشکلش حل شده )