OK, I think I can do this. Note that '>' means 'greater than or equal to' because I can't get the character to display properly. Assume f(x) is nonzero for some x.

Then f = id:

f(x)f(1)=f(x) => f(1) = 1 => f(2) =2

f(2)f(0)=2f(0)=f(0) => f(0) = 0

f(-1) + f(1) = f(0) = 0 => f(-1) = -1

=> f(n) = n for all integers n

f(q)f(p/q) = qf(p/q) = f(p) = p

=> f(p/q) = p/q for all rationals p/q

Let a>0. Then f(a) = f(sqrt(a))^2 > 0

Let c>b. Then f(c) = f(c-b) + f(b) > f(b) since f(c-b)>0

=> f is increasing

Now given any real number x, we can find sequences of rationals t(n) above and u(n) below which tend to x. f(t(n)) > f(x) > f(u(n)) => t(n) > f(x) > u(n) for all n

=> f(x) = x. QED