проверка, делится ли число на 6 PHP - PullRequest
48 голосов
/ 19 января 2010

Я хочу проверить, делится ли число на 6, и если нет, мне нужно увеличить его, пока оно не станет делимым.

как я могу это сделать?

Ответы [ 11 ]

117 голосов
/ 19 января 2010
if ($number % 6 != 0) {
  $number += 6 - ($number % 6);
}

Оператор modulus дает остаток от деления, поэтому $ number% 6 - это сумма, оставшаяся при делении на 6. Это будет быстрее, чем выполнение цикла и непрерывная повторная проверка.

Если допустимо уменьшение, то это еще быстрее:

$number -= $number % 6;
22 голосов
/ 19 января 2010
if ($variable % 6 == 0) {
    echo 'This number is divisible by 6.';
}:

Делим на 6:

$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
6 голосов
/ 19 января 2010
$num += (6-$num%6)%6;

нет необходимости в цикле while! Модуль (%) возвращает остаток от деления. IE 20% 6 = 2. 6-2 = 4. 20 + 4 = 24. 24 делится на 6.

5 голосов
/ 19 января 2010

Итак, вы хотите следующий кратный 6, не так ли?

Вы можете разделить свое число на 6, затем ceil и снова умножить его:

$answer = ceil($foo / 6) * 6;
2 голосов
/ 29 января 2018

Я вижу, что некоторые другие ответы вызывают по модулю дважды.

Я предпочитаю не просить php сделать то же самое более одного раза.По этой причине я кэширую остаток.

Другие разработчики могут предпочесть не генерировать дополнительную глобальную переменную или иметь другие обоснования для использования оператора по модулю дважды.

Код: ( Demo )

$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
2 голосов
/ 19 января 2010

Используйте оператор Mod % (модуль)

if ($x % 6 == 0) return 1;


function nearest_multiple_of_6($x) {
    if ($x % 6 == 0) return $x;    

    return (($x / 6) + 1) * 6;
}
1 голос
/ 19 января 2010

Предполагая, $foo является целым числом:

$answer = (int) (floor(($foo + 5) / 6) * 6)
1 голос
/ 19 января 2010

Просто запустите цикл while, который продолжит цикл (и увеличит число), пока число не делится на 6.

while ($number % 6 != 0) {
    $number++;
}
0 голосов
/ 19 января 2010
result = initial number + (6 - initial number % 6)
0 голосов
/ 19 января 2010

Почему бы вам не использовать Оператор модуля ?

Попробуйте это:

while ($s % 6 != 0) $s++;

Или это вы имели в виду?

<?

 $s= <some_number>;
 $k= $s % 6;

 if($k !=0)    $s=$s+6-$k;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...