Given an integer N, the task is to find base -2 representation of the number N in the form of a string, such that S0 * (- 2)0 + S1 * (- 2)1 + ... + Sk * (- 2)k = N. The string should only consist of 0s and 1s and unless the string is equal to zero, the initial character should be 1.
Examples:
Input: N = -9
Output: 1011
Explanation: 1011 is -2 representation of -9
(-2)0+ (-2)1+ (-2)3 = 1+ (-2) + (-8) = -9Input: N = -7
Output: 1001
Approach: Follow the steps below to solve the problem:
- Initialize an empty string S.
- Iterate from N, until N is greater than zero.
- If N is even, append '0' in front of S and divide N by -2.
- Otherwise, append '1' in front of S, and decrement N by 1, and then divide N by -2.
- If the string S is empty, then return '0'
- Finally, return the string S.
Below is the implementation of the above approach:
// C++ Program for above approach
#include <bits/stdc++.h>
using namespace std;
// Function to convert N to
// equivalent representation in base -2
string BaseConversion(int N)
{
// Stores the required answer
string s = "";
// Iterate until N is
// not equal to zero
while (N != 0) {
// If N is Even
if (N % 2 == 0) {
// Add char '0' in
// front of string
s = "0" + s;
}
else {
// Add char '1' in
// front of string
s = "1" + s;
// Decrement N by 1
N--;
}
// Divide N by -2
N /= -2;
}
// If string is empty,
// that means N is zero
if (s == "") {
// Put '0' in string s
s = "0";
}
return s;
}
// Driver Code
int main()
{
// Given Input
int N = -9;
// Function Call
cout << BaseConversion(N);
return 0;
}
// Java Program for above approach
class GFG {
// Function to convert N to
// equivalent representation in base -2
public static String BaseConversion(int N) {
// Stores the required answer
String s = "";
// Iterate until N is
// not equal to zero
while (N != 0) {
// If N is Even
if (N % 2 == 0) {
// Add char '0' in
// front of string
s = "0" + s;
} else {
// Add char '1' in
// front of string
s = "1" + s;
// Decrement N by 1
N--;
}
// Divide N by -2
N /= -2;
}
// If string is empty,
// that means N is zero
if (s == "") {
// Put '0' in string s
s = "0";
}
return s;
}
// Driver Code
public static void main(String args[]) {
// Given Input
int N = -9;
// Function Call
System.out.println(BaseConversion(N));
}
}
// This code is contributed by _saurabh_jaiswal.
# Python Program for the above approach
# Function to convert N to
# equivalent representation in base -2
def BaseConversion(N):
# Stores the required answer
s = ""
# Iterate until N is
# not equal to zero
while (N != 0):
# If N is Even
if (N % 2 == 0):
# Add char '0' in
# front of string
s = "0" + s
else:
# Add char '1' in
# front of string
s = "1" + s
# Decrement N by 1
N -= 1
# Divide N by -2
N /= -2
# If string is empty,
# that means N is zero
if (s == ""):
# Put '0' in string s
s = "0"
return s
# Driver Code
# Given Input
N = -9
# Function Call
print(BaseConversion(N))
# This code is contributed by _saurabh_jaiswal
// C# Program for above approach
using System;
using System.Collections.Generic;
class GFG{
// Function to convert N to
// equivalent representation in base -2
static string BaseConversion(int N)
{
// Stores the required answer
string s = "";
// Iterate until N is
// not equal to zero
while (N != 0) {
// If N is Even
if (N % 2 == 0) {
// Add char '0' in
// front of string
s = "0" + s;
}
else {
// Add char '1' in
// front of string
s = "1" + s;
// Decrement N by 1
N--;
}
// Divide N by -2
N /= -2;
}
// If string is empty,
// that means N is zero
if (s == "") {
// Put '0' in string s
s = "0";
}
return s;
}
// Driver Code
public static void Main()
{
// Given Input
int N = -9;
// Function Call
Console.Write(BaseConversion(N));
}
}
// This code is contributed by bgangwar59.
<script>
// JavaScript Program for the above approach
// Function to convert N to
// equivalent representation in base -2
function BaseConversion(N)
{
// Stores the required answer
let s = "";
// Iterate until N is
// not equal to zero
while (N != 0) {
// If N is Even
if (N % 2 == 0) {
// Add char '0' in
// front of string
s = "0" + s;
}
else {
// Add char '1' in
// front of string
s = "1" + s;
// Decrement N by 1
N--;
}
// Divide N by -2
N /= -2;
}
// If string is empty,
// that means N is zero
if (s == "") {
// Put '0' in string s
s = "0";
}
return s;
}
// Driver Code
// Given Input
let N = -9;
// Function Call
document.write(BaseConversion(N));
// This code is contributed by Potta Lokesh
</script>
Output:
1011
Time Complexity: O(N)
Auxiliary Space: O(1)