Мое оригинальное простое решение:
1. print( (abs(Number)+Number) / 2 )
Это решение будет работать в большинстве случаев, если только Number не очень большой (больше половины максимального значения, например Number> = MAX_INT / 2), и в этом случае добавление может вызвать переполнение.
Следующее решение решает проблему переполнения:
2. print( (abs(Number)/2) + (Number/2) )
Однако может быть случай, когда Number является и должен оставаться целым числом, а оператор деления (/) является целочисленным делением, так что 7/2 = 3. В этом случае решение 2 не будет работать, потому что если Number = 7, оно напечатает 6 (для этого случая решение 1 будет работать просто отлично).
Так что, если нам нужно иметь дело как с большими числами, так и с целочисленной арифметикой, на помощь приходит следующее чудовище, добавляющее компенсацию для 1, которая может быть потеряна в делении на 2 в случае нечетного целого числа:
3. print(
( (abs(Number)/2)+(Number/2) ) +
((
(Number-(2*(Number/2))) +
(abs(Number)-(2*(abs(Number)/2)))
) / 2)
)