0
Как определить, кратно ли число другому числу?
Делаю что-то наподобие рулетки на C++, нужно определить, кратно ли значение функции rand() числу 23 (эти значения будут победными) . Как это сделать?
2 Réponses
+ 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).
0
Для проверки кратности достаточно стандартной операции %, потому что нужен не сам остаток, а проверка его на 0. Если a % b == 0, то a кратно b.