0

Как определить, кратно ли число другому числу?

Делаю что-то наподобие рулетки на C++, нужно определить, кратно ли значение функции rand() числу 23 (эти значения будут победными) . Как это сделать?

20th Dec 2017, 7:20 PM
Кен Япония
Кен Япония - avatar
2 Answers
+ 4
Для конкретного случая кратности числу 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).
20th Dec 2017, 7:36 PM
James16
James16 - avatar
0
Для проверки кратности достаточно стандартной операции %, потому что нужен не сам остаток, а проверка его на 0. Если a % b == 0, то a кратно b.
20th Dec 2017, 9:46 PM
Вадим Сухотин (Vadim Sukhotin)
Вадим Сухотин (Vadim Sukhotin) - avatar