наибольшее число без условного оператора - PullRequest
1 голос
/ 20 декабря 2010

Может ли кто-нибудь объяснить, как найти наибольшее из четырех чисел без использования условного оператора. Для 3 чисел, которые я сделал, но для четырех чисел, как записать различные сравнения.

Ответы [ 3 ]

1 голос
/ 20 декабря 2010

Существует стандартный способ вычисления min или max в 2-й арифметике без использования условий:

int max(int a, int b){
    unsigned diff = b - a;  // negative if a > b
    int sign = -(diff >> (sizeof(int) * CHAR_BIT - 1)); // -1 if a > b, 0 otherwise
    return (a & sign) | (b & ~sign);
}

легко масштабируется.

1 голос
/ 11 февраля 2011

вы можете найти максимум двух чисел a, b, используя следующий трюк:

(абс (а + б) + ABS (а-б)) / 2

Расширьте трюк на столько чисел, сколько хотите.

1 голос
/ 20 декабря 2010
void main()
{
  int a, b;
  printf("Enter a and b:");
  scanf("%d %d", &a, &b);
  printf("Maximum number is %d", max(a, b));
  getch();
}
int max(int a, int b)
{
  int c, temp;
  c = a - b;
  temp = c + abs(c);
  // To check if the difference is negative or not
  if(temp) //As suggested by R..
    return b;
  else
    return a;
}

Этот код предназначен для сравнения двух чисел.Сделайте это сравнение для всех чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...