25 / 25 / 42
Регистрация: 25.03.2014
Сообщений: 233
1

Даны два целых числа k и n. Выведите 2k + 2n

20.04.2014, 14:37. Показов 3893. Ответов 5
Метки нет (Все метки)

Нельзя использовать циклы, условные инструкции, вызовы функций (то есть любые нелинейные конструкции в алгоритмах), арифметические операции («+», «-», «*», деление). Можно использовать
только битовые операции.

Даны два целых числа k и n. Выведите 2k + 2n
0 <= n, k <= 30

Пример:

Ввод
0 1

Вывод
3

Вот мой вариант кода
Pascal
1
2
3
4
5
6
7
var
  n, k: int64;
  
begin
  read(n, k);
  write((1 shl n) or (1 shl k));
end.
Эта программа не работает, если n и k одинаковые. Подскажите, как исправить.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2014, 14:37
Ответы с готовыми решениями:

Даны два целых числа k и n. Выведите (2 ^ k) + (2 ^ n)
Можно использовать только (shr, shl, xor, and, or). Условия и Циклы использовать НЕЛЬЗЯ! Помогите...

Даны два целых числа А и В, A> B. Выведите на экран результат перемножения всех чисел от А до В
:cry:Помогите

Даны два натуральных числа n и m. Сократите дробь nm, то есть выведите два других числа p и q таких, что nm=qp
Даны два натуральных числа n и m. Сократите дробь nm, то есть выведите два других числа p и q...

Даны два натуральных числа n и m. Сократите дробь (n / m), то есть выведите два других числа p и q таких, что (n / m) =
Даны два натуральных числа n и m. Сократите дробь (n / m), то есть выведите два других числа p и...

5
1643 / 1072 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
21.04.2014, 09:59 2
Лучший ответ Сообщение было отмечено IceCortez как решение

Решение

Pascal
1
2
3
4
5
6
7
var
  n, k: int64;
  
begin
  n:=2; k:=2;
  writeln(((1 shl n) or (1 shl k)) shl (Ord(n=k)));
end.
Ord и '=' не относятся к битовым операциям - надо придумать как их заменить...
1
25 / 25 / 42
Регистрация: 25.03.2014
Сообщений: 233
21.04.2014, 15:54  [ТС] 3
Спасибо!

Добавлено через 38 минут
Возникла 1 проблема. Если ввести 30 30, то выводит -2147483648 вместо 2147483648. Как это исправить?
0
1643 / 1072 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
21.04.2014, 16:16 4
Это можно исправить, используя длинную арифметику... только это уже будет не "уложить" в рамки побитовых операций.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31262 / 20435 / 7967
Регистрация: 22.10.2011
Сообщений: 35,485
Записей в блоге: 6
21.04.2014, 21:02 5
Лучший ответ Сообщение было отмечено IceCortez как решение

Решение

Цитата Сообщение от APALoff Посмотреть сообщение
Это можно исправить, используя длинную арифметику...
Да ладно...
Pascal
1
2
3
4
5
6
7
var
  n, k: int64;
  
begin
  readln(n, k); // 30 30 -> 2147483648, 40 40 -> 2199023255552
  writeln(((int64(1) shl n) or (int64(1) shl k)) shl (Ord(n=k)));
end.
Магия?
0
1643 / 1072 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
21.04.2014, 21:55 6
Цитата Сообщение от UI Посмотреть сообщение
Магия?
Магия типов... тогда все ограничивается 63, вместо 30.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2014, 21:55

Даны три целых числа. Выведите значение наименьшего из них
Условие Даны три целых числа. Выведите значение наименьшего из них. a=int(input())...

Вводится два целых числа A и B. Выведите их сумму
Ввод осуществляется из файла input.txt. Вывод на консоль. Вводится два целых числа A и B. Выведите...

Даны два целых числа А и В (A<B). Найти произведение всех целых чисел от А до В включительно
помогите

Даны два целых числа A и B (A < B). Найти сумму всех целых чисел от A до B включительно
Даны два целых числа A и B (A &lt; B). Найти сумму всех целых чисел от A до B включительно. как это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.