|
Вопрос # 3 682/ вопрос открыт / |
|
Здравствуйте, эксперты!
Я столкнулся с одной прогой... Вы не могли бы мне помочь рассказать как она работает?
var n, k : integer;
begin
read(n);
k := 0;
while n <> 0 do
begin
k := k + n and 1;
n := n shr 1;
end;
writeln(1 shl k)
end.
Меня смущает эта строчка:k := k + n and 1;
Заранее спасибо!
 |
Вопрос задал: Черняев Саша (статус: Посетитель)
Вопрос отправлен: 24 января 2010, 19:58
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Паровоз
Здравствуйте, Черняев Саша!
Программа вычисляет число ненулевых битов в двоичном представлении числа n. С треугольником Паскаля это вряд ли связано.
 |
Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 24 января 2010, 21:01
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 24 января 2010, 22:23; участников в обсуждении: 2.
|
Черняев Саша (статус: Посетитель), 24 января 2010, 19:59 [#1]:
Программа вычисляет количество нечетных чисел в n-ой строке треугольника Паскаля.
|
|
Паровоз (статус: 10-ый класс), 24 января 2010, 22:05 [#2]:
В цикле, число n каждый раз сдвинается на 1 вправо и выделяется самый младший бит. Таким образом, на k-м шаге получаем k-й двоичный разряд числа n. Для этого бита нет отдельной переменной. В переменной k они суммируются сразу. Инструкция k := k + n and 1 добавляет к сумме k, полученной на предыдущем шаге очередной бит (n and 1).
|
|
Черняев Саша (статус: Посетитель), 24 января 2010, 22:23 [#4]:
мне просто интересно, как это с треугольником паскаля связано...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|