ఒక సంఖ్యను హెక్సాడెసిమల్ లీట్‌కోడ్ సొల్యూషన్‌గా మార్చండి


కఠినత స్థాయి సులువు
తరచుగా అడుగుతుంది <span style="font-family: Mandali; ">ఫేస్‌బుక్ </span> మైక్రోసాఫ్ట్
బిట్ మానిప్యులేషన్

ఒక సంఖ్యను హెక్సాడెసిమల్ లీట్‌కోడ్ సొల్యూషన్‌గా మార్చడంలో సమస్య మాకు ఒక పూర్ణాంకాన్ని అందిస్తుంది. అప్పుడు ఇచ్చిన వాటిని మార్చమని అడుగుతుంది పూర్ణ సంఖ్య దశాంశ సంఖ్య వ్యవస్థలో హెక్సాడెసిమల్ సంఖ్య వ్యవస్థలో. మరింత అధికారికంగా, ప్రశ్న మనకు బేస్ 10 లో ఇచ్చిన పూర్ణాంకాన్ని బేస్ 16 ప్రాతినిధ్యంగా మార్చాలి. దశాంశ సంఖ్య వ్యవస్థలో మాకు సంఖ్య ఇవ్వబడిన సమస్యను మేము ఇప్పటికే పరిష్కరించాము. మరియు దానిని బేస్ 7 గా మార్చవలసి ఉంది. కాబట్టి, మరింత ముందుకు వెళ్ళే ముందు, కొన్ని ఉదాహరణలను పరిశీలిద్దాం.

ఉదాహరణ

26
1a

ఒక సంఖ్యను హెక్సాడెసిమల్ లీట్‌కోడ్ సొల్యూషన్‌గా మార్చండి

వివరణ: హెక్సాడెసిమల్ నంబర్ సిస్టమ్ గురించి తెలుసుకుంటే ఈ మార్పిడి సులభం. మీకు తెలియకపోతే, ఇచ్చిన సంఖ్యను బేస్ 16 ప్రాతినిధ్యంగా మార్చండి. మేము పునరావృత విభజన మరియు మిగిలిన వాటిని నిల్వ చేయడం ద్వారా చేస్తాము. గమనించదగ్గ విషయం ఏమిటంటే, 10 హెక్సాడెసిమల్ సంజ్ఞామానం లో 'a' ఉపయోగించి ప్రాతినిధ్యం వహిస్తుంది.

-1
ffffffff

వివరణ: ప్రతికూల సంఖ్యలు వాటి 2 యొక్క పూరక సంజ్ఞామానం వలె నిల్వ చేయబడతాయి కాబట్టి. దాని 1 సె కాంప్లిమెంట్ సంజ్ఞామానం -2 లో 11111111111111111111111111111111. కాబట్టి, మేము దీనిని హెక్సాడెసిమల్‌గా మారుస్తాము, ఇది అవుట్‌పుట్‌లో చూపబడుతుంది.

సంఖ్యను హెక్సాడెసిమల్ లీట్‌కోడ్ సొల్యూషన్‌గా మార్చడానికి అప్రోచ్

సమస్యలో లోతుగా డైవింగ్ చేసే ముందు ఒక సంఖ్యను హెక్సాడెసిమల్ లీట్‌కోడ్ సొల్యూషన్‌గా మార్చండి. మొదట హెక్సాడెసిమల్ నంబర్ సిస్టమ్‌తో మనల్ని పరిచయం చేసుకుందాం. కాబట్టి, హెక్సాడెసిమల్ సంఖ్య వ్యవస్థ కూడా దశాంశ సంఖ్య వ్యవస్థ వలె ఉంటుంది, అయితే 10 నుండి 15 సంఖ్యలు 'a' నుండి 'f' వరకు లోయర్-కేస్ అక్షరాలను ఉపయోగించి సూచించబడతాయి. కాబట్టి, మనం దశాంశ సంఖ్య వ్యవస్థలోని పూర్ణాంకాన్ని బేస్ 16 ప్రాతినిధ్యంగా మార్చవచ్చు. మరియు మార్పిడి తరువాత, మేము 10 - 15 సంఖ్యలను a - f తో భర్తీ చేస్తాము. కానీ ఏమి, మేము ప్రతికూల సంఖ్యలతో చేస్తాము? ప్రతికూల సంఖ్యలు బైనరీ వ్యవస్థలో 2 సె పూరక సంజ్ఞామానం లో నిల్వ చేయబడతాయి కాబట్టి. మేము సంతకం చేయని పూర్ణాంకంలో సంఖ్యను నిల్వ చేసి, దానిని బేస్ 16 గా మారుస్తాము.

జావా భాషలోని కోడ్ కూడా అదే పనిని చేస్తుంది కాని బిట్ మానిప్యులేషన్ ఉపయోగించి కొంచెం భిన్నమైన పద్ధతిలో అమలు చేయబడుతుంది. కాబట్టి, మొదట మనం ఇచ్చిన సంఖ్యను 15 తో తీసుకుంటాము. ఈ ఆపరేషన్ 16 తో మోడ్ తీసుకోవటానికి సమానం. అప్పుడు ఎడమ షిఫ్ట్ ఉపయోగించడం 16 ను ఉపయోగించి విభజనకు సమానం.

కోడ్

హెక్సాడెసిమల్ లీట్‌కోడ్ సొల్యూషన్‌కు సంఖ్యను మార్చడానికి సి ++ కోడ్

#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

సంఖ్యను హెక్సాడెసిమల్ లీట్‌కోడ్ సొల్యూషన్‌గా మార్చడానికి జావా కోడ్

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) లాగ్ n), ఇక్కడ n అనేది ఇచ్చిన ఇన్పుట్ యొక్క పొడవు, M (n) రెండు 2-బిట్ సంఖ్యలను విభజించడానికి తీసుకునే సమయం. కాబట్టి, సమయ సంక్లిష్టత లోగరిథమిక్.

అంతరిక్ష సంక్లిష్టత

ఓ (1), మేము సంఖ్యలోని ప్రతి అంకెకు సంబంధించి ఏ డేటాను నిల్వ చేయలేదు. స్థల సంక్లిష్టత స్థిరంగా ఉంటుంది.