Reverse Polish notation to ease the order of operations issue. You could either store the numbers as fractions, or use floating point and test whether they are integers within a certain tolerance.
A variation on the problem would be to allow concatenation of adjacent numbers.
Of interest: link 1 and link 2 -- problems from Project Euler.
Note that all Project Euler problems have solutions that can run in under one minute in a compiled language, and almost always in an interpreted language as well, on a system with standard (modest) specs.
In terms of an algorithm you could do in your head on the spot, I don't know of any general way. Obviously if you play a lot you will recognize some patterns and remember ways to get common numbers; e.g., you will recognize when the target is simply the product of all the numbers. I think that might fall more under Heuristics than an algorithm -- using "best guess" methods.