В худшем случае P + 1 = N-1. Поскольку максимальное значение ynumber может быть только 2147483647 или -2147483647 для любого единственного числа, это означает, что в наихудших случаях P будет максимальным или минимальным. В других случаях P все равно будет длинным целым числом. Из-за этого вам нужно использовать только длинный сценарий наихудшего случая (поскольку, если в худшем случае ожидаемый результат будет таким, что P является самым большим возможным числом, которое может быть любым одним числом, оно является длинным.
Чтобы убедиться, что вам не нужно использовать ничего большего, сопоставьте отрицательные значения с постовыми, чтобы вы оставались ниже переполнения длинного.
Представьте, что у нас есть 3 числа, ab и C. Если a + b переполняет длинный тип данных , мы знаем, что c не будет P.
Теперь представьте, что у нас есть 4 числа, a, b, c, d такие, что a + b + c = d (означает d является P), если a + b будет overflow long, это означает 1) c не может быть P 2) существует комбинация a + b + c, так что тип данных long не должен быть переполнен.
Например, a является максимально длинным, b является максимальным, c является минимальным, а d равно 0, то a + c + b = d будет правильной комбинацией операций, чтобы не использовать тип данных больше, чем длинный, и мы можем попробовать + c, так как мы знаем, что c не может быть P, так как a + b будет переполняться длинным> максимально возможное значение P.
Похоже 'длинной long' должно хватить. –
@ jerry-coffin Обратите внимание на использование слова ** обеспечить ** в вопросе в самом конце, «обеспечить» обычно не считается эквивалентным _should_. – mctylr
@mctylr: Я бы не стал упоминать об этом, если это было недостаточно, но: «' long long' * гарантирует * достаточный диапазон ». Это делает вас счастливее? –