Вычисление product
в вашем коде действительно должно быть сделано, используя al oop.
Вместо этого:
product = arr[i]*arr[i+1]*arr[i+2]*arr[i+3]*arr[i+4]*arr[i+5]*arr[i+6]*arr[i+7]*arr[i+8]*arr[i+9]*arr[i+10]*arr[i+11]*arr[i+12] ;
попробуйте это:
for (product=arr[i], j=1; j<13; j++) product *= arr[i+j];
Мало того, что он намного короче и намного проще для чтения, обслуживания и отладки, но также позволит избежать ошибок целочисленного переполнения, из-за которых ваша программа давала неправильные ответы.
В C выражение, умножающее две int
переменные (например, arr[i]*arr[i+1]
), сгенерирует int
результат. Если этот результат слишком велик, чтобы поместиться в переменную int
(обычно ограниченную 2 31 -1, что намного меньше, чем 9 13 ), тогда он будет переполнен, и вы получит неправильный результат.
С другой стороны, если вы умножите переменную long long int
на переменную int
(как в product *= arr[i+j]
), значение int
будет повышено до long long int
до выполнения расчета. Такое поведение называется «продвижение типа». Подробнее об этом можно прочитать здесь.