Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में संख्या एन्कोड करें


मान लीजिए हमारे पास एक गैर-ऋणात्मक पूर्णांक n है, और हमें उसका एन्कोडेड रूप ढूंढना है। एन्कोडिंग रणनीति निम्नलिखित होगी:

संख्याएन्कोडेड संख्या
0""
1"0"
2"1"
3"00"
4"01"
5"10"
6"11"
7"000"

इसलिए यदि संख्या 23 है, तो परिणाम 1000 होगा, यदि संख्या 54 है, तो यह 10111 होगा।

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

  • bin नामक एक विधि बनाएं, जो n और k लेगी, यह विधि निम्नानुसार कार्य करेगी:
  • res := खाली स्ट्रिंग
  • जब तक n > 0
    • res := res + (n mod 2) का अंक
    • n := n / 2
  • res को उल्टा करें
  • जब तक x > res की लंबाई
    • res := res के साथ 0 प्रीपेंड करें
  • res लौटाएं
  • वास्तविक विधि निम्नानुसार होगी:
  • यदि n = 0, तो खाली स्ट्रिंग लौटाएं, यदि n = 1, तो "0" लौटाएं, या जब n = 2, तो "1" लौटाएं
  • x := log n आधार 2
  • यदि 2 ^ (x + 1) - 1 = n, तो
    • ans := खाली स्ट्रिंग
    • x को 1 से बढ़ाएं
    • जब तक x 0 नहीं है, ans := ans के साथ 0 जोड़ें, और x को 1 से बढ़ाएं
    • ans लौटाएं
  • bin(n - 2^x + 1, x) लौटाएं

उदाहरण

#include <bits/stdc++.h> using namespace std; class Solution {    public:    string bin(int n, int x){       string result = "";       while(n>0){          result += (n%2) + '0';          n/=2;       }       reverse(result.begin(), result.end());       while(x>result.size())result = '0' + result;       return result;    }    string encode(int n) {       if(n == 0)return "";       if(n == 1)return "0";       if(n==2) return "1";       int x = log2(n);       if(((1<<(x+1)) - 1) == n){          string ans = "";          x++;          while(x--)ans+="0";          return ans;       }       return bin(n - (1<<x) + 1, x);    } }; main(){    Solution ob;    cout << (ob.encode(23)) << endl;    cout << (ob.encode(56)) << endl; }

इनपुट

23 54

आउटपुट

1000 11001

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस

  1. - C++ में एडम नंबर जांचना

    इस खंड में हम देखेंगे कि दी गई संख्या एडम नंबर है या नहीं, इसकी जांच करने वाला प्रोग्राम कैसे लिखें। कोड में जाने से पहले देखते हैं कि एडम नंबर क्या है? एडम नंबर वह संख्या है, मान लीजिए n, यदि n का वर्ग और n के रिवर्स का वर्ग एक-दूसरे के रिवर्स हैं, तो वह संख्या एडम नंबर है। उदाहरण के लिए संख्या 13