| 
| 
 | Вопрос # 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]:мне просто интересно, как это с треугольником паскаля связано... |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |