Загрузка...

Help with solving the problem for the institute

Thread in C/C++ created by Dunvil Oct 8, 2021. 260 views

  1. Dunvil
    Dunvil Topic starter Oct 8, 2021 5 Jun 11, 2020
    Ввести числа X и Y (0 <=X,Y<= 255). Вычислить, не используя арифметические операции, сумму остатка от деления X на 8 и наибольшего числа, кратного 8, не превосходящего Y .
     
  2. kageno
    kageno Oct 8, 2021 1625 Dec 12, 2016
    Dunvil,
    C
    #include <stdio.h>
    #include <stdlib.h>

    int main() {
    int x, y, balance = 0;
    scanf("%d", &x);
    scanf("%d", &y);

    int f = (x >> 3) << 3;
    if (f != x) {
    balance = x & ~f;
    }

    printf("Остаток: %d\nСамое большое число кратное 8-ми: %d", balance, x & f);
    }
     
  3. kekuz
    kekuz Oct 8, 2021 2 Oct 6, 2021
    C
    #include <iostream>

    using namespace std;

    // Возвращает сумму a и b используя побитовый
    // операторы.

    int sum(int a, int b)

    {
    int s = a ^ b;

    int carry = a & b;

    if (carry == 0) return s;

    else return sum(s, carry << 1);
    }

    int main(int argc, char const *argv[]) {

    int x, y;
    cin >> x >> y;

    // Остаток от деления a ≥ 0 на 2^n можно получить, выделив младшие биты (которые пропали бы при сдвиге вправо) с помощью соответствующей маски: a & ((1 << n) - 1)
    int rem = x & 7 /* ((1 << 3) - 1) */;

    int num = (y >> 3) << 3; // Наибольшее число, не превосходящее y, кратное восьми

    cout << sum(rem, num);

    return 0;
    }
     
Top
Loading...