मान लीजिए हमारे पास एक संख्या N है, हमें "0" और "1" से बनी एक स्ट्रिंग खोजनी है जो आधार -2 (ऋणात्मक दो) में इसके मान को दर्शाती है। लौटाई गई स्ट्रिंग में कोई लीडिंग जीरो नहीं होने चाहिए, जब तक कि स्ट्रिंग ठीक "0" न हो।
उदाहरण के लिए, यदि इनपुट 2 है, तो आउटपुट "110" होगा, क्योंकि (-2)² + (-2)¹ + (-2)⁰ = 4 - 2 + 1 = 3... रुको, 2 के लिए: (-2)² + (-2)¹ = 4 - 2 = 2, तो "110" सही है।
समाधान दृष्टिकोण
ret := खाली स्ट्रिंग
यदि N = 0, तो "0" लौटाएं
जब तक N ≠ 0:
rem := N % (-2)
N := N / (-2)
यदि rem < 0 तो rem += 2 और N++ करें
ret में rem जोड़ें
ret को रिवर्स करके लौटाएं
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string baseNeg2(int N) {
string ret = "";
if(N == 0) return "0";
while(N){
int rem = N % (-2);
N /= -2;
if(rem < 0) rem += 2, N++;
ret += to_string(rem);
}
reverse(ret.begin(), ret.end());
return ret;
}
};
int main(){
Solution ob;
cout << (ob.baseNeg2(17));
return 0;
}
इनपुट
17
आउटपुट
10001