проверка, делится ли число на 6 PHP
Я хочу проверить, делится ли число на 6, и если нет, мне нужно увеличить его, пока он не станет делимым.
Как я могу это сделать ?
11 ответов
if($number %6 != 0) {
$number += 6 - ($number % 6);
}
на модуль оператор дает остаток деления, поэтому $number % 6-это сумма, оставшаяся при делении на 6. Это будет быстрее, чем делать цикл и постоянно перепроверять.
Если уменьшение приемлемо, то это еще быстрее:
$number -= $number % 6;
if ($variable % 6 == 0) {
echo 'This number is divisible by 6.';
}:
сделать делимым на 6:
$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
$num += (6-$num%6)%6;
нет необходимости в цикле! По модулю ( % ) возвращается остаток деления. Т. е. 20%6 = 2. 6-2 = 4. 20+4 = 24. 24 делится на 6.
Итак, вы хотите следующее кратное 6, не так ли?
вы можете разделить свой номер на 6, затем ceil
это, и умножить его снова:
$answer = ceil($foo / 6) * 6;
использовать Mod % (модуля) оператор
if ($x % 6 == 0) return 1;
function nearest_multiple_of_6($x) {
if ($x % 6 == 0) return $x;
return (($x / 6) + 1) * 6;
}
Я вижу некоторые другие ответы, вызывающие по модулю дважды.
Я предпочитаю не просить php делать то же самое более одного раза. По этой причине я прячу остальное.
другие разработчики могут предпочесть не генерировать дополнительную глобальную переменную или иметь другие обоснования для использования оператора по модулю дважды.
код: (демо)
$factor = 6;
for($x = 0; $x < 10; ++$x){ // battery of 10 tests
$number = rand( 0 , 100 );
echo "Number: $number Becomes: ";
if( $remainder = $number % $factor ) { // if not zero
$number += $factor - $remainder; // use cached $remainder instead of calculating again
}
echo "$number\n";
}
Возможный Выход:
Number: 80 Becomes: 84
Number: 57 Becomes: 60
Number: 94 Becomes: 96
Number: 48 Becomes: 48
Number: 80 Becomes: 84
Number: 36 Becomes: 36
Number: 17 Becomes: 18
Number: 41 Becomes: 42
Number: 3 Becomes: 6
Number: 64 Becomes: 66
просто запустите цикл while, который будет продолжать цикл (и увеличивать число), пока число не будет делиться на 6.
while ($number % 6 != 0) {
$number++;
}
для фриков микро-оптимизации:
if ($num % 6 != 0)
$num += 6 - $num % 6;
другое оценки %
, но меньше ветвления / цикла. :- P
почему бы вам не использовать Оператор Модуля?
попробуйте это:
while ($s % 6 != 0) $s++;
или это то, что вы имели в виду?
<?
$s= <some_number>;
$k= $s % 6;
if($k !=0) $s=$s+6-$k;
?>