#include <iostream> #include <cmath> #include <vector> void _to_bin(int num, std::vector<int> * out) { if (num / 2) _to_bin(num / 2, out); out->push_back(num % 2); } void to_bin(int num, int numDigit) { std::vector<int> out; _to_bin(num, &out); for (int i = 0; i < numDigit - out.size(); ++i) std::cout << 0; for (int i = 0; i < out.size(); ++i) std::cout << out.at(i); std::cout << std::endl; } void set_bits(int* num, int numDigit) { *num = 1; for (int i = 1; i < numDigit; ++i) *num = *num << 1 | 1; } void to0101(int numDigit) { // all 0 for (int fist_01_pos = 0; fist_01_pos < numDigit - 1; ++fist_01_pos) { int mask = 0; mask |= (1 << fist_01_pos); for (int second_01_pos = 2 + fist_01_pos; second_01_pos < numDigit - 1; ++second_01_pos) { int result = mask; result |= (1 << second_01_pos); to_bin(result, numDigit); } } // all 1 after right most 01 for (int fist_01_pos = 1; fist_01_pos < numDigit - 4; ++fist_01_pos) { int mask = 0; set_bits(&mask, fist_01_pos); mask |= (1 << fist_01_pos); for (int second_01_pos = 2 + fist_01_pos; second_01_pos < numDigit - 1; ++second_01_pos) { int result = mask; result |= (1 << second_01_pos); to_bin(result, numDigit); } } // all 1 for (int fist_01_pos = 0; fist_01_pos < numDigit - 1; ++fist_01_pos) { int mask = 0; set_bits(&mask, numDigit); mask ^= (2 << fist_01_pos); for (int second_01_pos = 2 + fist_01_pos; second_01_pos < numDigit - 1; ++second_01_pos) { int result = mask; result ^= (2 << second_01_pos); to_bin(result, numDigit); } } } int main() { std::cout << std::endl << "5 digits" << std::endl << std::endl; to0101(5); std::cout << std::endl << "10 digits" << std::endl << std::endl; to0101(10); std::cout << std::endl << "15 digits" << std::endl << std::endl; to0101(15); return 0; }
Standard input is empty
5 digits 00101 01001 01010 10101 01101 01011 10 digits 0000000101 0000001001 0000010001 0000100001 0001000001 0010000001 0100000001 0000001010 0000010010 0000100010 0001000010 0010000010 0100000010 0000010100 0000100100 0001000100 0010000100 0100000100 0000101000 0001001000 0010001000 0100001000 0001010000 0010010000 0100010000 0010100000 0100100000 0101000000 0000001011 0000010011 0000100011 0001000011 0010000011 0100000011 0000010111 0000100111 0001000111 0010000111 0100000111 0000101111 0001001111 0010001111 0100001111 0001011111 0010011111 0100011111 0010111111 0100111111 1111110101 1111101101 1111011101 1110111101 1101111101 1011111101 0111111101 1111101011 1111011011 1110111011 1101111011 1011111011 0111111011 1111010111 1110110111 1101110111 1011110111 0111110111 1110101111 1101101111 1011101111 0111101111 1101011111 1011011111 0111011111 1010111111 0110111111 0101111111 15 digits 000000000000101 000000000001001 000000000010001 000000000100001 000000001000001 000000010000001 000000100000001 000001000000001 000010000000001 000100000000001 001000000000001 010000000000001 000000000001010 000000000010010 000000000100010 000000001000010 000000010000010 000000100000010 000001000000010 000010000000010 000100000000010 001000000000010 010000000000010 000000000010100 000000000100100 000000001000100 000000010000100 000000100000100 000001000000100 000010000000100 000100000000100 001000000000100 010000000000100 000000000101000 000000001001000 000000010001000 000000100001000 000001000001000 000010000001000 000100000001000 001000000001000 010000000001000 000000001010000 000000010010000 000000100010000 000001000010000 000010000010000 000100000010000 001000000010000 010000000010000 000000010100000 000000100100000 000001000100000 000010000100000 000100000100000 001000000100000 010000000100000 000000101000000 000001001000000 000010001000000 000100001000000 001000001000000 010000001000000 000001010000000 000010010000000 000100010000000 001000010000000 010000010000000 000010100000000 000100100000000 001000100000000 010000100000000 000101000000000 001001000000000 010001000000000 001010000000000 010010000000000 010100000000000 000000000001011 000000000010011 000000000100011 000000001000011 000000010000011 000000100000011 000001000000011 000010000000011 000100000000011 001000000000011 010000000000011 000000000010111 000000000100111 000000001000111 000000010000111 000000100000111 000001000000111 000010000000111 000100000000111 001000000000111 010000000000111 000000000101111 000000001001111 000000010001111 000000100001111 000001000001111 000010000001111 000100000001111 001000000001111 010000000001111 000000001011111 000000010011111 000000100011111 000001000011111 000010000011111 000100000011111 001000000011111 010000000011111 000000010111111 000000100111111 000001000111111 000010000111111 000100000111111 001000000111111 010000000111111 000000101111111 000001001111111 000010001111111 000100001111111 001000001111111 010000001111111 000001011111111 000010011111111 000100011111111 001000011111111 010000011111111 000010111111111 000100111111111 001000111111111 010000111111111 000101111111111 001001111111111 010001111111111 001011111111111 010011111111111 111111111110101 111111111101101 111111111011101 111111110111101 111111101111101 111111011111101 111110111111101 111101111111101 111011111111101 110111111111101 101111111111101 011111111111101 111111111101011 111111111011011 111111110111011 111111101111011 111111011111011 111110111111011 111101111111011 111011111111011 110111111111011 101111111111011 011111111111011 111111111010111 111111110110111 111111101110111 111111011110111 111110111110111 111101111110111 111011111110111 110111111110111 101111111110111 011111111110111 111111110101111 111111101101111 111111011101111 111110111101111 111101111101111 111011111101111 110111111101111 101111111101111 011111111101111 111111101011111 111111011011111 111110111011111 111101111011111 111011111011111 110111111011111 101111111011111 011111111011111 111111010111111 111110110111111 111101110111111 111011110111111 110111110111111 101111110111111 011111110111111 111110101111111 111101101111111 111011101111111 110111101111111 101111101111111 011111101111111 111101011111111 111011011111111 110111011111111 101111011111111 011111011111111 111010111111111 110110111111111 101110111111111 011110111111111 110101111111111 101101111111111 011101111111111 101011111111111 011011111111111 010111111111111