Возможно ли это сделать без цикла? - PullRequest
4 голосов
/ 13 августа 2011

У меня проблемы с поиском решения этой проблемы, которое не включает цикл.По сути, если что-то больше произвольного числа, оно зацикливается.Допустим, число 64 - это число.

0 => 0
32 => 32
64 => 64
96 => 32
128 => 64
160 => 32
192 => 64

и так далее.

То, как я сейчас это делаю, включает цикл while, который проверяет, превышает ли значение 64 и неесть вычесть 64 из него.Есть ли другой способ сделать это без циклов?

Я использую C # WinForms.

Ответы [ 4 ]

6 голосов
/ 13 августа 2011

Изменить значение на 64, это операция O (1).Как это:

int number;
// number is initialized
number %= 64;
5 голосов
/ 13 августа 2011
public static int filterNumber(int x, int arbitraryNumber) {
  if (x < arbitraryNumber) {
    return x;
  }

  int result = x % arbitraryNumber;
  if (result == 0) {
    return arbitraryNumber;
  }

  return result;
}
1 голос
/ 13 августа 2011

Модуло само по себе не поможет в случае деления на 64.

if (number == 0)
    return 0;
var mod = number % 64;
return (mod == 0) ? 64 : mod;
0 голосов
/ 13 августа 2011
return n      == 0 ?  0 :
       n % 64 == 0 ? 64 :
       n % 32 == 0 ? 32 :
                     -1; // you have not specified this case in your examples!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...