1) Во-первых, за счет несогласованности действий римских консулов. А во-вторых, из-за своей тактики. Первоначально, римляне потеснили центр пунов за счёт своей тяжёлой пехоты. Но пуны, окружив увлёкшиехся преследованием римских легионеров, заперли их с тыла. Битву на флангах римские всадники тоже проиграли. А под конец было бегство уцелевших римлян.
2) Против Ганнибала выступала вся Римаская империя. Его же поддерживали немногие сограждане в совете. То есть армия римлян постоянно пополнялась и не успевал он разбить одну, путь к Риму преграждала другая. У Ганнибала же подкреплений почти не было, так как в совете Карфагена войну считали разорительной, не выгодной.
Карфаген - больше торговый город и правили им торговцы, не понимавшие или не хотевшие понимать значение этой войны. А Римом правили не только торговцы, в сенате были и опытные военачальники, понимавшие величину опасности, исходящей от Ганнибала. Так что, война против него была всенародной,а Ганнибалу приходилось воевать на два фронта: с римлянами и с торгашами у власти в Карфагене. Выходит, что против всей мощи Рима воевал не весь Карфаген, а всего лишь одна постепенно тающая армия Ганнибала.