It's always been my understanding that Scipio's troops at Zama weren't "hardened veterans" as many on this thread have claimed, but a collection of defeated troops (Cannae survivors, etc.) he raised in Sicily after his admonishment by the Senate. Granted, they weren't exactly "raw" recruits, but not exactly "hardened vets" (i.e. his Spanish troops). Scipio also didn't have elephants, but did devise an innovative way of dealing with (and defeating) them.
Scipio has always been my favorite Roman general and, IMO, he really gets the short end of the stick by historians. The guy was Rome's savior, at its time of most dire need, in what was the most pivotal conflict in the Republic/Empire's history.
And then there's the Hannibal envy. Great battlefield tactician - but that's just about it. He was not a very good politician, as evidenced by his lack of support from home and his almost complete inability to turn any Latin allies to his side - the one factor he most needed to accomplish his goals. He was not very good at seeing the whole picture. I'm assuming he had poor intelligence beforehand, hence his complete miscalculation of the relationship between Rome and its Latin allies. Terrible miscalculation for someone described by some as the "greatest ever." Baah! Scipio learned tactics from observations of Hannibal's victories, he was bold in their implementation (Carthago Nova, Illipa) and was a great politician, as evidenced by his ability to do what Hannibal could not (i.e. the wooing of Massinissa and his ability to turn much of the Spanish tribes to his side).
Hannibal is nothing but a one-trick pony(albeit with a very good trick). Scipio was the complete package.