Активизировавшиеся после традиционного затишья зимой 203–202 гг. до н. э. боевые действия начались с похода Ганнибала, заручившегося ранее поддержкой многих ливийских городов и части нумидийцев во главе с Месотилой, из Малого Лептиса на Хадрумет. Публий Сципион тем временем занял подступы к Карфагену, заставив пунийского полководца спешно изменить направление и двинуться на перехват римлянам. Вражеские войска встретились около Замы, располагавшейся в пяти дневных переходах от пунийской столицы. Вначале полководцы пытались вести переговоры. Ганнибал говорил о готовности уступить Риму все карфагенские владения за пределами Африки, Сципион же требовал полной и безоговорочной капитуляции, что было для карфагенского военачальника неприемлемым (Polyb. XV, 6–7; Liv. XXX, 29–32). Все должна была решить битва, ставшая завершающим сражением Второй Пунической войны.
Силы сторон были приблизительно равны, и хотя пунийцы имели численное превосходство, конников у них было намного меньше, чем у римлян, и их воины уступали неприятелю в уровне подготовленности. В подчинении Ганнибала находилось около 50 тыс. пехотинцев, 3 тыс. всадников и 80 боевых слонов. Ядром карфагенской пехоты были надежные и опытные ветераны италийского похода, однако их было немного. Наемники из войска Магона были существенно слабее, а воины гражданского ополчения Карфагена и вовсе составляли наименее надежную часть войска. Под командованием Сципиона было около 30 тыс. пехотинцев, из которых 6 тыс. привел Массинисса, и 8 тыс. конников, более половины которых составляли нумидийцы. Ганнибал поставил впереди своего войска слонов, за которыми расположил первую линию из вспомогательных отрядов наемников – галлов, балеаров, лигуров и мавров. Вторую линию пунийского построения составляли карфагеняне, ливийцы и македоняне, присланные на помощь Карфагену царем Филиппом V. В третьей линии резерва полководец поставил испытанных ветеранов, а фланги прикрывала конница – карфагенская на правом и нумидийская на левом. Сципион применил несколько модифицированное построение гастатов, принципов и триариев, расположив манипулы не в шахматном порядке, а колоннами в затылок друг другу. Это создавало широкие проходы в построении, предназначенные для того, чтобы пропустить в них слонов и забросать их с двух сторон дротиками. В начале сражения эти промежутки должны были заполнить легковооруженные велиты, задачей которых было при появлении слонов отступить в тыл либо примкнуть к манипулам в колоннах и взять на себя борьбу со слонами. Правый фланг построения должна была прикрывать многочисленная нумидийская конница под командованием Массиниссы, а левый – италийские всадники во главе с Гаем Лэлием (Polyb. XV, 9, 6—10; Liv. XXX, 33, 1–3).
Сражение началось с атаки боевых слонов. Часть из них римляне испугали ревом боевых труб, сигналами рожков и криками, обратили в бегство и направили на пунийскую пехоту. Сильнее всего при этом пострадали занимавшие левый фланг нумидийцы и мавры. Это позволило Массиниссе атаковать в этом месте пунийскую пехоту и конницу и обратить их в бегство. Остальные слоны вначале пошли на ряды римлян, но под градом дротиков свернули на правый фланг, где Гай Лэлий также воспользовался численным преимуществом в коннице и атаковал кавалерию пунийцев, отбросив ее назад. Таким образом, римская и нумидийская конницы начали обходить построение карфагенян с флангов, тогда как в центре римляне также перешли в наступление, потеснив первые шеренги построения неприятеля. Сражение велось с равным упорством с обеих сторон, ветераны Ганнибала оказывали римлянам ожесточенное сопротивление, однако они не смогли выдержать удара с тыла, когда кавалерия Массиниссы и Гая Лэлия, довершив разгром вражеской конницы, вернулась к месту основного сражения. Карфагенские воины дрогнули, и началось их беспорядочное бегство с поля боя; Ганнибал с небольшим отрядом всадников бежал в Гадрумет (Polyb. XV, 9—14; Liv. XXX, 32).
Битва при Заме стала событием, сломавшим хребет Карфагенской державы. Не имея больше возможности сопротивляться, пунийское правительство согласилось со всеми условиями Рима. Карфаген терял все владения, за исключением ближайшей округи, а также лишался права вести войну за пределами Африки и даже там мог начать боевые действия лишь с разрешения Римской республики. Пунийцам запрещалось иметь боевой флот, за исключением десяти сторожевых трирем. Остальные корабли числом более 500, а также все боевые слоны передавались Риму. В течение 50 лет карфагеняне обязывались выплатить контрибуцию в размере 10 тыс. талантов. Былое могущество Карфагенского колониального государства было сломлено, чтобы никогда не возродиться.