Jestem autorem tego zadania, ale i tak nie pomaga mi to w zrozumieniu twojego problemu.Czy dziwi cię, że coś takiego występuje - "zerowanie" zmiennej po przekroczeniu zakresu tej zmiennej, czy to że robi to trochę wcześniej?
Nie chcę się zagłębiać w twój program, ale przy tego typu testowaniu, powinieneś testować maksymalnie upraszczając, więc nie dwie funkcje na raz, tylko najpierw jedną a potem drugą, a dopiero na koniec tak jak teraz obie jednocześnie.
No cóż, jednak się w końcu trochę zagłębiłem 
int bin[66]; to dużo za mało, tu też musisz użyć unsigned long long
unsigned long long int n =18446744073709551615; <-- przy kompilacji będzie warning
napisz:
unsigned long long n =18446744073709551615llu; //int nie musisz pisać