Я взял Codility.com demo test.Смущенный про демонстрационный тест Codility
Моя программа вернула неверное значение для одного из модульных тестов:
TEST extreme_large_numbers последовательности с экстремально большого числа испытаний арифметического переполнения.
ВРЕМЯ 0.056 s.
РЕЗУЛЬТАТ НЕПРАВИЛЬНО ОТВЕТ получил 2, но это не точка равновесия, сумма [0..1] = 4294967294, сумма [3..3] = - 2
Хорошо, так как я не мог Сначала я вижу проблему в моем коде, я попытался запустить ее в проекте Visual Studio. Затем компилятор поймал, что 4294967294
был слишком большой для int
. Это должно быть uint
, или long
. Поэтому я все изменил до long
и работал в VS.
Однако демонстрационный тест не позволяет вам изменять типы ввода/возврата функции на long
.
- 2.147.483.647 (самое большое 32-битное целое)
- 4294967294 (номер, присвоенный с помощью теста Codility.com единицы)
Может кто-то пожалуйста, объясните, как эта программа может работать должным образом, возможно, с 4294967294
как одно из значений данных в int[]
?
1. Я согласен, что мое решение не является самым эффективным, но я не блестящий программист, и это всего лишь 30 минут! 2. Я не думаю, что вы ответили на мой вопрос; как я могу сравнивать значения, если у меня нет достаточно большого типа данных для хранения '4294967294' ?? – JohnB
1. Я просто указывал на это ... 2. Вы этого не делаете, это фактически отрицательные значения, но суммы больших значений превышают диапазон 'int'. – Lucero
Я вижу ... '2147483647 * 2 = 4294967294' Они намеренно выдувают тип данных' int' :( – JohnB