I have a program in c++ to print all the binary numbers that have 64 bits. But the problem is it works only for 30 bits. Beyond that the program does not work possibly because of insufficient space availability. Any suggestions will be highly appreciated.

my code is as below:

// C++ program to generate n-bit binary numbers

#include <iostream>

#include <string>

#include <vector>

#include <fstream>

using namespace std;

// This function generates all n bit Gray codes and prints the

// generated codes

void generateSequence(int n)

{

// base case

if (n <= 0)

return;

// 'arr' will store all generated codes

vector<string> arr;

// start with one-bit pattern

arr.push_back("0");

arr.push_back("1");

// Every iteration of this loop generates 2*i codes from previously

// generated i codes.

int i, j;

for (i = 2; i < (1<<n); i = i<<1)

{

// Enter the prviously generated codes again in arr[].

// Now arr[] has double number of codes.

for (j = 0 ; j < i ; j++)

arr.push_back(arr[j]);

// append 0 to the first half

for (j = 0 ; j < i ; j++)

arr[j] = "0" + arr[j];

// append 1 to the second half

for (j = i ; j < 2*i ; j++)

arr[j] = "1" + arr[j];

}

// print contents of arr[]

for (i = 0 ; i < arr.size() ; i++ )

cout << arr[i] << endl;

}

// Driver program to test above function

int main()

{

int n;

printf("Enter the number : ");

scanf("%d", &n);

generateSequence(n);

return 0;

}

my code is as below:

// C++ program to generate n-bit binary numbers

#include <iostream>

#include <string>

#include <vector>

#include <fstream>

using namespace std;

// This function generates all n bit Gray codes and prints the

// generated codes

void generateSequence(int n)

{

// base case

if (n <= 0)

return;

// 'arr' will store all generated codes

vector<string> arr;

// start with one-bit pattern

arr.push_back("0");

arr.push_back("1");

// Every iteration of this loop generates 2*i codes from previously

// generated i codes.

int i, j;

for (i = 2; i < (1<<n); i = i<<1)

{

// Enter the prviously generated codes again in arr[].

// Now arr[] has double number of codes.

for (j = 0 ; j < i ; j++)

arr.push_back(arr[j]);

// append 0 to the first half

for (j = 0 ; j < i ; j++)

arr[j] = "0" + arr[j];

// append 1 to the second half

for (j = i ; j < 2*i ; j++)

arr[j] = "1" + arr[j];

}

// print contents of arr[]

for (i = 0 ; i < arr.size() ; i++ )

cout << arr[i] << endl;

}

// Driver program to test above function

int main()

{

int n;

printf("Enter the number : ");

scanf("%d", &n);

generateSequence(n);

return 0;

}

If you generate the combinations in order, you only ever need access to the combination you just completed to generate the next combination. Therefore, you should output combinations as you generate them and then discard them. There is no reason to store all of them.

If you will only ever need 64 bits, you might consider using a std::uint64_t to hold the bits, assuming your system has one, although a single std::string would be a more robust solution.

If you will only ever need 64 bits, you might consider using a std::uint64_t to hold the bits, assuming your system has one, although a single std::string would be a more robust solution.

Topic archived. No new replies allowed.