Смотрите этот ответ: https://stackoverflow.com/a/11694778/4907651
Именно то, что вы ищете, кроме делителя 3.
EDIT: объяснение
заменит функцию add
с просто +
, как вы «искать решение без использования *
или /
.
В этом объяснении мы предполагаем, что мы делим на 3.
Кроме того, я предполагаю, что вы знаете, как преобразовать десятичную дробь в двоичную и наоборот.
int divideby3 (int num) {
int sum = 0;
while (num > 3) {
sum += (num >> 2);
num = (num >> 2) + (num & 3);
}
if (num == 3)
sum += 1;
return sum;
}
Этот подход использует битовые операторы:
- побитовое И:
&
.
- Побитовый сдвиг влево:
<<
. Сдвигает двоичные значения.
- Побитовый сдвиг вправо:
>>
. Сдвигает двоичные значения вправо.
- побитовое исключающее ИЛИ:
^
Первое условие (num > 3)
как таковой, потому что делитель 3. В вашем случае, делитель 9, поэтому, когда вы используете его, то условие должно быть (num > 9)
.
Пусть число, которое мы хотим разделить это 6.
В двоичном, 6 представлена в виде 000110
.
Теперь мы вводим петлю while (num > 3)
. В первом заявлении добавляется sum
(инициализировано до 0) до num >> 2
.
Что num >> 2
делает:
Num в двоичном первоначально: 00000000 00000110
после побитового сдвига: 00000000 00000001 i.e. 1 in decimal
sum
после добавления num >> 2
является 1
.
Поскольку мы знаем, что num >> 2
равно 1, добавьте это к num & 3
.
Num в двоичной системе изначально: 00000000 00000110
3 в двоичной системе: 00000000 00000011
Для каждой битовой позиции в результате экспрессии a & b
, бит равен 1, если оба операнда содержат 1, и 0 в противном случае
результат num & 3
: 00000000 00000010 i.e. 2 in decimal
num
после num = (num >> 2) + (num & 3)
равна 1 + 2
= 3
Теперь, так как num
равно 3, мы входим в if (num==3)
петлю.
Затем мы добавляем 1 к сумме и возвращаем значение. Это значение sum
является частным.
Как и следовало ожидать, возвращаемое значение равно 2.
Надежда, что не было ужасное объяснение.
Homework неудачу; ( –
Самый простой способ сделать разделение не является повторным вычитанием –
Мартин Джеймс: нет, это не домашнее задание, а http://www.geeksforgeeks.org/makemytrip-interview-questions-set -6/этот вопрос –