Ваш цикл while не прекратится, если val
равно >= 2^31
.
Это потому, что k == 2^31
по-прежнему <=
val
, но 2^31 << 1 == 2^32
переполняется и становится равным 0. Что по-прежнемуменьше, чем предел.
Вы можете продлить условие, чтобы нарушить его, если тоже k == 0
, тогда проблема должна исчезнуть.
(^
означает возведение в степень, а не xor в этом посте)