Thanks. This was only my third comment on HN, so I guess I wasn't sure what to expect of the commenting system. It's my fault for not reviewing the post after submitting it though.
I've refined the program so that it isn't so much of an offense against all that is good and holy in programming practices. It is now only an offense against most programming practices. (cough Millions of executions of eval. cough 14 levels of nested for loops.)
The comments now explain what it is actually doing.
The new and improved version of the program generates solutions for upwards of 2080 of the years between 0 and 2100, including everything from the last century except 1911.
It is also disgustingly parallel, and would make a good case study if you want to try your hand at a Map/Reduce or similar distributed approach. (That is the only feasible way to brute force this problem if you go up to 5 or 6 operators, unless you have a supercomputer handy. Even with only 4 operators it pegs JRuby for upwards of five minutes on my laptop, and the complexity is bounded by n^n where n is the number of operators.)
Edit:
So I have a program running now that is calculating them all in a cough extremely hack way. I'll post the code once I get all 200 of them between 1900 and 2100.
I sincerely would like to see your recursive solution to this. Mine was not successful, so I ripped it out and went with the ugly approach that actually generated answers.
Actually, not 9! but (1+2) x 3 x ... x 9, because multiplying by 1 is no use.
According to my brute-forcer, you can get everything from 0 to 2283 but not 2284. The first few missing numbers are 2284, 2758, 2812, 2902, 2932, 3076, 3119, 3137, 3208. The first gap of more than one number is that you can't do either 3802 or 3803. The first gap of >= 3 numbers is 4280-4282. The total number of different achievable nonnegative integers is 14026. The biggest two are 9! and (3/2)x9!, unsurprisingly.
I regret that my program doesn't record how it achieved each number, so without running it again I can't tell you how to get 2036 or 2086 as per 3pt14159's request above.
2010 = 2 * 3 * 5 * (7+11+13+17+19)