This is a solution to problem 16 on the hard interview questions node. If you have not read the question, the following will make no sense to you:

Below is a piece of code (in SML) that will do the trick. It's a function from int to bool list.

fun odd n = (n mod 2) = 1

fun f 0 false false acc = acc
  | f 0 true  false acc = false::acc
  | f 0 evenp true  acc = f 0 (not evenp) (not evenp) (true::acc)
  | f n false carry acc = f (n div 2) true (odd(n) orelse carry) ((not(odd(n) = carry))::acc)
  | f n true  carry acc = f (n div 2) false (odd(n) andalso carry) ((not(odd(n) = carry))::acc)

fun minus2 n = f' n true false []
Sample output:
- minus2 5;
val it = [true,false,true] : bool list
- minus2 6;
val it = [true,true,false,true,false] : bool list