тут дійсно виходить переповнення, для типу лонг це крайні значення
я чучуть переписав програму під компілятор VC, ось вона можливо пригодиться.
// ConsoleCPP.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
using namespace std;
int main()
{
int i, suma=0, dobutok=1;
long x[15];
system("cls");
srand( time (NULL) );
for (int q = 0; q < 10000; q++)
{
for(i=0; i<15; i++)
{
x[i]= 6 - rand() % 12;
if( x[i] > 0) dobutok *= x[i];
if( x[i] < 0) suma += x[i];
}
if(dobutok < 0 )
{
printf("\t\t\tsomething goes wrong \nindex = %d\nmul = %d", q, dobutok);
for (int z = 0; z < 15; z++)
{
printf("%d ", x[z]);
}
break;
}
else
{
printf("ok \t mul = %d\n",dobutok);
dobutok = 1;
suma = 0;
}
}
system("pause");
}