تحويل رقم إلى حل Leetcode سداسي عشري


مستوى الصعوبة سهل
كثيرا ما يطلب في Facebook Microsoft
معالجة البت

توفر لنا مشكلة تحويل رقم إلى حل Leetcode سداسي عشري عددًا صحيحًا. ثم يطلب منا تحويل المعطى عدد صحيح في نظام الأرقام العشري إلى نظام الأرقام الست عشري. بشكل أكثر رسمية ، يتطلب السؤال منا تحويل عدد صحيح معطى في الأساس 10 إلى تمثيل للأساس 16. لقد حللنا بالفعل مشكلة حيث حصلنا على رقم في نظام الأرقام العشري. واضطررنا إلى تحويلها إلى القاعدة 7. لذا ، قبل المضي قدمًا ، دعنا نلقي نظرة على بعض الأمثلة.

مثال

26
1a

تحويل رقم إلى حل Leetcode سداسي عشري

شرح: هذا التحويل سهل ، إذا حدث أن تعرف نظام الأرقام السداسي العشري. ولكن إذا لم تكن على دراية بذلك ، فما عليك سوى تحويل الرقم المحدد إلى تمثيل أساسي 16. نقوم بذلك عن طريق القسمة المتكررة وتخزين الباقي. هناك شيء واحد يجب ملاحظته وهو أن الرقم 10 يتم تمثيله باستخدام "أ" بالتدوين السداسي العشري.

-1
ffffffff

Explanation: بما أن الأرقام السالبة مخزنة على أنها تدوين مكمل لـ 2. إن تدوين المكمل -1 في 2s هو 11111111111111111111111111111111. لذلك ، نقوم فقط بتحويل هذا إلى سداسي عشري الذي يظهر في الإخراج.

نهج لتحويل رقم إلى حل Leetcode سداسي عشري

قبل التعمق في المشكلة ، قم بتحويل رقم إلى حل Leetcode سداسي عشري. دعونا أولاً نتعرف على نظام الأرقام السداسي العشري. لذا ، فإن نظام الأرقام السداسي العشري يشبه أيضًا نظام الأرقام العشري ولكن يتم تمثيل الأرقام من 10 إلى 15 باستخدام أبجديات صغيرة من "a" إلى "f". لذلك ، يمكننا ببساطة تحويل عدد صحيح في نظام الأرقام العشري إلى التمثيل الأساسي 16. وبعد التحويل ، نقوم ببساطة باستبدال الأعداد من 10 إلى 15 بـ a - f. لكن ماذا نفعل بالأرقام السالبة؟ حيث يتم تخزين الأرقام السالبة في 2 ثانية تدوين مكمل في النظام الثنائي. نحن ببساطة نخزن الرقم في عدد صحيح غير موقع ونحوله إلى الأساس 16.

تؤدي الشفرة في لغة Java أيضًا نفس الشيء ولكن يتم تنفيذها بطريقة مختلفة قليلاً باستخدام معالجة البت. لذلك ، نأخذ أولاً & من الرقم المحدد بالرقم 15. هذه العملية تعادل أخذ mod مع 16. ثم استخدام إزاحة لليسار يعادل القسمة باستخدام 16.

رمز

كود C ++ لتحويل رقم إلى حل Leetcode سداسي عشري

#include <bits/stdc++.h>
using namespace std;

const string decToHex = "0123456789abcdef";

string toHex(int n){
    if(n==0)
        return "0";
    unsigned int num = n;
    string ans = "";
    while(num > 0){
        ans = decToHex[num%16] + ans;
        num /= 16;
    }
    return ans;
}

int main(){
    cout<<toHex(26);
}
1a

كود جافا لتحويل رقم إلى حل Leetcode سداسي عشري

import java.util.*;
import java.lang.*;
import java.io.*;

class Solution
{
  public static String toHex(int n) {
        String decToHex = "0123456789abcdef";
        if(n==0)
            return "0";
        int num = n;
        String ans = "";
        while(num != 0){
            ans = decToHex.charAt(num&15) + ans;
            num = num >>> 4;
        }
        return ans;
    }
    
  public static void main (String[] args) throws java.lang.Exception
  {
    System.out.print(toHex(-1));
  }
}
ffffffff

تحليل التعقيد

تعقيد الوقت

O (M (n) log n) ، حيث n هو طول المدخل المعطى ، M (n) هو الوقت المستغرق لتقسيم رقمين من 2 بت. لذا ، فإن تعقيد الوقت لوغاريتمي.

تعقيد الفضاء

يا (1) ، نظرًا لأننا لم نخزن أي بيانات بخصوص كل رقم في الرقم. تعقيد الفضاء ثابت.