تحويلات الأساس 10 إلى الأساس n [مغلق]
-
13-12-2019 - |
سؤال
أحاول كتابة برنامج C++ يقوم بالتحويلات الأساسية.
أريد تحويل رقم عشري إلى جميع قواعد الأعداد الصحيحة الأخرى من 2 إلى 20.
هل هناك خوارزمية فعالة وسهلة التنفيذ للتحويلات الأساسية؟
المحلول
لا أفهم أين المشكلة بالضبط؟من السهل جدًا والمباشر إجراء التحويل الأساسي:يمكنك أن تفعل ذلك كما تفعل باليد.
- تقسيم رقم بواسطة قاعدة
- اكتب الباقي
- كرر العملية مع الجزء الصحيح من القسمة
- توقف عندما تصل إلى الصفر
- الباقي بالترتيب العكسي يعطيك الأرقام الموجودة قاعدة
مثال:
1025 (عشري) للأساس 15:
1025 / 15 = 68 , remainder 5
68 / 15 = 4 , remainder 8
4 / 15 = 0 , remainder 4
الرقم في الأساس 15 هو 485
نصائح أخرى
قد يكون لديك مشكلتين:
التحليل من القاعدة الأصلية إلى تمثيل الأعداد الصحيحة الأصلية للكمبيوتر (
strtol
جيد جدًا في هذا).التنسيق في القاعدة الجديدة.(
itoa
جيد جدًا في هذا).
إذا كنت تريد أن تكتبها بنفسك، فقد يعجبك div
وظيفة.تقوم بتغذية الرقم والقاعدة، وينقسم الرقم الموجود في أقصى اليمين.كرر للحصول على جميع الأرقام.
إذا كنت تريد أن تكون أكثر كفاءة، يمكنك القسمة على مربع الأساس، والحصول على رقمين في المرة الواحدة (استخدم جدول بحث للحصول على أحرف ASCII لكلا الرقمين). فيما يلي مثال على بعض التطبيقات الفعالة للغاية. لن يكون تغييره لاستخدام قاعدة مختلفة أمرًا صعبًا.