Код не проходит проверку по последнему пункту. Именно математически хочу решить, сдвигом разряда. Результат выдает правильный. Про абсолютное значение уже почитал, это быстро добавить, если потребуется :
if ( a < 0 ) { a = -a }