Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Увеличение числа для того, чтобы оно стало кратно 16

Допустим, есть число 102. Как узнать, на сколько его нужно увеличить, чтоб оно стало кратным 16?


Ответ

Для конкретного случая кратности числу 16 можно использовать битовую арифметику для взятия модуля:
int p = 102; int needAdd = -p & 0xf;

В общем случае вам нужен остаток (в Эйлеровском смысле, положительный). К сожалению, оператор % в языке C# не очень хорош для отрицательных значений аргумента, поэтому нам придётся написать свой:
public static int Modulo(int p, int q) { q = Math.Abs(q); var result = p % q; if (result < 0) result += q; return result; }
Имея правильный остаток, задача тривиальна:
int p = 102; int q = 16; int needAdd = Modulo(-p, q);
Код не зависит от знаков чисел p, q (только бы q не было нулём).

Для пуристов: (needAdd + p) ≡ (−p + p) ≡ 0 (mod q), а по построению, needAdd ∈ [0, q).

Комментариев нет:

Отправить комментарий