Решаем задачи Абрамян на Паскале. While5

While5. Дано целое число $$N$$ ($$> 0$$), являющееся некоторой степенью числа 2: $$N = 2^K$$. Найти целое число $$K$$ — показатель этой степени.

Решение от Андрея:

Решение 2:
С помощью логического сдивига:

Другие задачи из раздела While можно посмотреть здесь.

Комментарии:

Комментарии 11

  • Если N=1, то K должен быть 0.

    • Плюс по такому алгоритму будет число на 1 меньше необходимого

      • исправил.

    • Оно так и работает. Если N=1 то выполняется условие «while temp>=2 do» цикл не проходит и K остаётся нулевым.

    • Да, действительно у меня было не так красиво:

      Изменил на вариант Андрея.
      Ещё вместо div можно использовать shr 1(логический сдвиг на 1 бит, что в данной задаче эквивалентно делению на 2, но возможно более быстрее отрабатывает).

  • я так сделал:
    var
    n:real;
    s:integer;
    begin
    s:=1;
    writeln (‘число в степени 2:’);
    readln (n);
    if n=1 then
    begin
    write (‘ нулевая степень’);
    exit;
    end
    else
    while n>2 do
    begin
    n:=n/2;
    s:=s+1;
    //writeln (‘степень=’,s,’ число= ‘,n); {разкоментировать для наглядности}
    end;
    writeln (s,’степень’);
    end.

  • нет,вот так лучше:
    var
    n:real;
    s:integer;
    begin
    s:=0;
    writeln (‘число в степени 2:’);
    readln (n);
    while n>1 do
    begin
    n:=n/2;
    s:=s+1;
    end;
    writeln (s,’ степень’);
    end.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *