Неверное произведение двух чисел INT_MAX в C / C ++ - PullRequest
5 голосов
/ 29 февраля 2012

В моем случае произведение двух чисел INT_MAX равно 296447233, что неверно.

long long int product = 0;
product = 2137483647 * 2137483647;
printf("product: %lli\n", product);

Что я делаю не так и как это исправить ?? Спасибо!

Ответы [ 2 ]

14 голосов
/ 29 февраля 2012

Оба ваших 2137483647 имеют тип int. Таким образом, они остаются такого типа и переполнены.

Сделать их long long с:

product = 2137483647LL * 2137483647LL;

или актерский состав:

product = (long long)2137483647 * 2137483647;
6 голосов
/ 29 февраля 2012

Попробуйте

product = 2137483647LL * 2137483647LL; 

, чтобы убедиться, что компиляция обрабатывает числа как длинные long

...