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

सी++ में एनकोड नंबर

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

<थेड>
संख्या एन्कोडेड नंबर
0 “”
1 “0”
2 “1”
3 ”00”
4 ”01”
5 ”10”
6 ”11”
7 ”000”

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

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

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

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

  1. सी++ पेंटाटोप नंबर

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

  1. C++ में एडम नंबर

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