http://citforum.ru/programming/cpp_march/cpp_061.shtmlЦитата:
В арифметическом выражении тип результата выражения определяется самым "широким" типом среди всех образующих выражение операндов. Этот тип называют результирующим типом выражения. К этому типу преобразуются все остальные операнды.
Следуя этому правилу при вычисления выражения
long int p = 1+ N*(N+1)/2;
N+1 усечёться до типа N=int
(N+1)/2 тоже усечётся до типа int
Чтобы этого не происходила надо явно указать приведение типа.
long int p = 1+ N*(long int(N)+1)/2;
PS. Я бы перепроверил citforum.ru по стандарту. И справке на компилятор
PPS. В паскале другие правила.