Generate pandoc dataclasses
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
# Задачи по побитовым операциям на Java
|
||||
|
||||
> **Условие:** без использования операторов выбора (`if`, `switch`, `?:`), циклов (`for`, `while`, `do`) и объявления новых функций. Только `main`, побитовые операции, арифметика и `System.out.println`.
|
||||
|
||||
---
|
||||
|
||||
## Задача 1. Умножить число на 4 без умножения
|
||||
|
||||
**Условие:** Дано целое число `n`. Получить `n * 4`, используя только побитовые операции.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 5 | 20 |
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task1 {
|
||||
public static void main(String[] args) {
|
||||
int n = 5;
|
||||
int result = n << 2; // сдвиг влево на 2 = умножение на 4
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Задача 2. Разделить число на 2 без деления
|
||||
|
||||
**Условие:** Дано целое число `n`. Получить `n / 2`, используя только побитовые операции.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 20 | 10 |
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task2 {
|
||||
public static void main(String[] args) {
|
||||
int n = 20;
|
||||
int result = n >> 1; // сдвиг вправо на 1 = деление на 2
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Задача 3. Проверить, чётное ли число
|
||||
|
||||
**Условие:** Дано целое число `n`. Вывести `1`, если оно чётное, и `0`, если нечётное.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 7 | 0 |
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task3 {
|
||||
public static void main(String[] args) {
|
||||
int n = 7;
|
||||
int result = (n & 1) ^ 1; // если младший бит 1 → 0, иначе → 1
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Задача 4. Обнулить младший бит
|
||||
|
||||
**Условие:** Дано целое число `n`. Обнулить его самый младший установленный бит.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 12 | 8 |
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task4 {
|
||||
public static void main(String[] args) {
|
||||
int n = 12;
|
||||
int result = n & (n - 1); // трюк: убирает младший установленный бит
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Задача 5. Установить k-й бит в 1
|
||||
|
||||
**Условие:** Даны число `n` и позиция `k` (нумерация с 0). Установить `k`-й бит в 1.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 8 2 | 12 |
|
||||
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task6 {
|
||||
public static void main(String[] args) {
|
||||
int n = 8; // 1000
|
||||
int k = 2;
|
||||
int result = n | (1 << k); // 1000 | 0100 = 1100 = 12
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Задача 6. Инвертировать k-й бит
|
||||
|
||||
**Условие:** Даны число `n` и позиция `k`. Инвертировать `k`-й бит.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 10 1 | 8 |
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task7 {
|
||||
public static void main(String[] args) {
|
||||
int n = 10; // 1010
|
||||
int k = 1;
|
||||
int result = n ^ (1 << k); // 1010 ^ 0010 = 1000 = 8
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Задача 7. Умножить число на 5 без умножения
|
||||
|
||||
**Условие:** Дано целое число `n`. Получить `n * 5`, используя только сдвиги и сложение.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 7 | 35 |
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task10 {
|
||||
public static void main(String[] args) {
|
||||
int n = 7;
|
||||
int result = (n << 2) + n; // 4n + n = 5n
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Задача 8. Умножить число на 3 без умножения
|
||||
|
||||
**Условие:** Дано целое число `n`. Получить `n * 3`, используя только сдвиги и сложение.
|
||||
|
||||
|**Ввод:** |**Вывод:**|
|
||||
|--|--|
|
||||
| 7 | 21 |
|
||||
|
||||
**Решение:**
|
||||
```java
|
||||
public class Task10 {
|
||||
public static void main(String[] args) {
|
||||
int n = 7;
|
||||
int result = (n << 1) + n; // 2n + n = 3n
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user