Професионална програма
Loading...
Filkolev avatar Filkolev 4486 Точки

Ако си зациклил може да погледнеш как го правят лекторите в някое от видеата от март - тази задача (ако става дума за същата) я решават там. Секцията е "Подготовка за изпит".

Иначе има два варианта, които съм пробвал и работят. Ще опиша накратко логиката.

1) Със стринг - ако на изпита не се сетиш по друг начин, може и така, но дотогава ти препоръчвам да опитваш да го направиш с битови операции. Идеята е да обърнеш числото в двоичното му представяне, което е стринг, и след това да си направиш нов стринг, в който с цикъл да му набуташ в обратен ред символите на първия стринг. Накрая втория стринг го обръщаш пак в число.

2) С битови операции (както си трябва). Имаш две числа, вход и резултат. В цикъл, хващаш входното число, взимаш последния бит и го добавяш към резултата, като резултата го изместваш предварително веднъж наляво. След това входа го местиш веднъж надясно, за да вземеш следващия бит и цикълът се завърта наново. Цикълът трябва да спре, когато входното число стане 0.

Май доста зле го обясних, на хартия ако пробваш може да ти се изясни логиката, която описвам. Не искам да ти пействам код, защото смятам, че е по-полезно човек сам като се помъчи и намери решението, за да осмисли нещата по-добре.

2
mihayloff14 avatar mihayloff14 825 Точки

Относно втория ти вариант ще го представя с код (ако това имаш в предвид):

int numberToReverse = 160;
int reversedNumber = 0;

while (numberToReverse > 0)
{
    int extractedBit = numberToReverse & 1;
    reversedNumber = reversedNumber << 1;
    reversedNumber = reversedNumber | extractedBit;
    numberToReverse = numberToReverse >> 1;
}


Console.WriteLine(reversedNumber);

numberToReverse съдържа стойността на числото, което искаш да "обърнеш".

0