Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 23


main() {

long M;

printf("\n Введите целое число: ");

scanf("%ld",&M);

if(M==0) {

printf("\n B этом числе единиц нет");

exit(0); }

printf("\n Старший разряд находится в позиции номер %d", left__bit(M));

getch(); }

int left_bit(long N)

/* Определение позиции старшей единицы в числе N

Если N=0, функция возвращает -1 */ {

int k;

long j=0x80000000;

for(k=31; k >= 0; k--) {

if(j & N) return k;

j=j >> 1;

}

return -1; }

Программа 2_13.pas

program LeftBit;

{ Определение позиции старшей единицы в двоичном числе }

var

M:longint;

function left_bit(N:longint):byte;

{Определение позиции старшей единицы в числе N Если N=0, функция возвращает -1 }

var

k:byte; const

j:longint=$80000000;

begin

left_bit:=-l;

for k:=31 downto 0 do

begin

if (j and N)<> 0 then begin

left_bit:=k;

exit;

end;

j:=j shr 1;

end;

end;

begin

write('Введите целое число: ');

readln(M);

if M=0 then writeln('B этом числе единиц нет')

else

writelnf'Старший разряд находится в позиции номер ', left_bit(M));

readln; end.

Задание 2.14. Максимальное количество подряд стоящих единиц

Составить функцию max_bits(n), аргументом которой является длинное целое положительное число. Возвращаемое значение должно быть равно максимальному числу подряд расположенных единиц в двоичном представлении п. Например:

n = 3310 = 100012 max_bits (33) =1

n = 2810 = 111002 max_bits(28) =3

Совет 1 (общий)

Основная идея заключается в том, чтобы вести подсчет подряд стоящих единиц в двоичном представлении числа п до ближайшего нуля и сравнивать это количество с предшествующим претендентом на максимум. При этом не следует забывать, что отрицательные числа в памяти компьютера представлены в дополнительном коде и, например, такое число, как -1 (шестнадцатеричный эквивалент OXFFFFFFFF) содержит 32 единицы. Это означает, что знаковый разряд должен учитываться наравне с остальными. В QBasic такой учет вызывает дополнительные трудности.




- Начало -  - Назад -  - Вперед -