Ошибка в простейшем алгоритме

163
25 мая 2022, 01:10

Нужно обнулить последние биты даного числа n. 0<=n<=2^31. Вводиться n, само число биты которого нужно обнулить, потом k, оно показывает сколько бит с конца обнулять. 0<=k<=30. Нельзя использовать циклы. Написал, но никак не хочет проходить 6 тестов из 50.

#include <iostream>
using namespace std;
int main() {
    long long n, k, L = 4294967295, f = 0, S = 0;
    cin >> n >> k;
    if (k == 1) f = 1;
    else {
        S = (1 - (2 << (k - 1))) / (-1);
    }
    L -= S+f;
    cout << (L&n);
}

Использовал методику геометрической прогресии, чтобы сделать k нулей в числе L, а потом просто применил к даному числу, и к числу с вырезанными нужными нулями операцию &. Незнаю, почему не проходит 2 теста. Значительно повышал число L, но не в этом дело.

Answer 1
#include <iostream>
using namespace std;
int main()
{
    unsigned long input;
    int bits;
    cin >> input >> bits;
    input >>= bits; // Убираем все нужные биты
    input <<= bits; // Возвращаем на их место нули
    cout << input << endl;
    return 0;
}
Answer 2
unsigned int mask = 0xFFFFFFFF >> k;
unsigned int res = n & mask

это если надо биты обнулять не у числа, а у ячейки памяти (4 бита) в котором оно хранится

READ ALSO
Перебор между собой всех строк матрицы

Перебор между собой всех строк матрицы

У меня вот такая вот задача:

171
Категория Wordpress ведет на 404-ю страницу

Категория Wordpress ведет на 404-ю страницу

Создаю custom post type в wordpress и категории для него:

173
Передать другой формат даты в MySQL

Передать другой формат даты в MySQL

Приходит дата в формате 0501

254
CORS Proxy with PHP Curl (but with Client IP)

CORS Proxy with PHP Curl (but with Client IP)

В общем есть некое API, где выдаётся ссылка привязанная к IP адресу клиентаЯ попытался запросить с сайта через XmlHttpRequest и через fetch

164