М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
зика22
зика22
04.07.2021 01:18 •  Информатика

J3. Поменять значение бита Ограничение времени 1 секунда

Ограничение памяти 64Mb

Ввод стандартный ввод или input.txt

Вывод стандартный вывод или output.txt

Заданы два числа

a

и

n

. Вывести число, которое совпадает с

a

во всех битах, кроме

n

-го, а в

n

-м бите отличается. В данной задаче биты нумеруются с единицы.

Формат ввода

Входные данные содержат два целых числа

a

и

n

(

0



a



1

0

1

8

,

1



b



3

2

).

Формат вывода

Выведите одно число — ответ к задаче.


J3. Поменять значение бита Ограничение времени 1 секундаОграничение памяти 64MbВвод стандартный ввод
J3. Поменять значение бита Ограничение времени 1 секундаОграничение памяти 64MbВвод стандартный ввод

👇
Ответ:
irinaira72rt
irinaira72rt
04.07.2021

#include <iostream>

#include <cmath>

using namespace std;

int main(){

   long long a, answer=0;

   int n, bits[64]={0}, i=0;

   cin>>a>>n;

   while(a!=0){

       if(a%2==0)

           a/=2;

       else {

           bits[i]=1;

           a=(a-1)/2;

       }

       i++;

   }

   bits[n-1]=1-bits[n-1];

   for(int j=0; j<i; j++)

       answer+=bits[j]*pow(2,j);

   cout<<answer;

}

4,8(41 оценок)
Открыть все ответы
Ответ:
molokomo
molokomo
04.07.2021

=== Python 3.8.3 ===

def fastExp(b, n):

   def even(n):

       if n % 2 == 0:

           return True

       return False

   if n == 0:

       return 1

   if even(n):

       #Можно было написать return fastExp(b, b/2) ** 2, но операцию возведения в степень использовать нам запретили.

       res = fastExp(b, n/2)

       return res*res

   return b*fastExp(b, n-1)

def main():

   base = float(input())

   exp = int(input())

   print(fastExp(base, exp))

if __name__ == "__main__":

   main()

Предложенные тесты проходит. Сам алгоритм быстрого возведения в степень реализован в виде функции fastExp(b, n)

4,5(65 оценок)
Ответ:
meonder
meonder
04.07.2021

/*Простейшая реализация. Подразумевается, что вводятся корректные данные, n вмещается в int, а a и результат - в double. Визуализация зависимости числа операций умножения от степени n для чисел от 0 до 5000 прилагается */

#include <iostream>

double s_pow(double a, int power)

{

       if (power == 0)

       {

               return 1;

       }

       if (power % 2 == 0)

       {

               return s_pow(a * a, power / 2);

       }

       return a * s_pow(a, power - 1);

}

int main()

{

       double a;

       int n;

       std::cin >> a >> n;

       std::cout << s_pow(a, n);

       return 0;

}


Быстрое возведение в степень Возводить в степень можно гораздо быстрее, чем за n умножений! Для этог
4,7(4 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ