Контест Middle Типы и неопределённое поведение обновлено
Умножение int64 с проверкой переполнения
Условие
Для каждой пары 64-битных знаковых чисел выведите их произведение, если оно помещается в int64_t, иначе слово overflow.
Ввод: в первой строке q (1 ≤ q ≤ 700), далее q строк a b (−2⁶³ ≤ a, b ≤ 2⁶³ − 1).
Вывод: q строк.
Пример 1
Ввод:
3
3 -4
4611686018427387904 2
-9223372036854775808 1
Вывод:
-12
overflow
-9223372036854775808
Пример 2
Ввод:
2
-9223372036854775808 -1
3037000500 3037000500
Вывод:
overflow
overflow
Как подойти
Подсказки: 1
- Проверять нужно до умножения или средствами, которые не допускают UB.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Порядок байтов: перевернуть uint32 и посчитать единицы
Следующий вопрос
Середина двух int64 без переполнения
Ещё по теме «Типы и неопределённое поведение»
- std::bit_cast
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char
- Размер long на Windows и Linux
- Сопоставьте пример и вид поведения
- Почему проверка x + 1 < x исчезла