Mieszasz C++ z C(w C++ używa się cmath, nie math.h), polski z angielskim(funkcja binary(angielski), reszta po polsku).
Nie wiem co ma oznaczać zmienna “grey”, bardziej pasuje “kodGraya”, albo nawet samo “gray”.
Co do funkcji “main”, pierwsza pętla: nie musisz używać potęgowania. Podstawą jest 2, więc wydajniej będzie użyć przesunięcia bitowego w lewo(<<). Kod:
for(int i=0; i < (1 << n); i++)
Do tego rozmiar int i long int na x86 jest taki sam(nie wiem jak jest na x86_64 i innych), więc lepiej użyć __int64(GCC: int64_t) jeśli chcesz mieć 64-bitową liczbę. Co do funkcji “binary”: lepiej użyć tablicy char’ów(tablica char[33] - więcej nie potrzeba, bo int jest 32-bitowy na x86, można ewentualnie rozmiar ustawić na sizeof(int)*8 + 1). I wydajniej(AFAIK) będzie użyć koniunkcji bitowej zamiast reszty z dzielenia. Kod: