Сравнение двух целых чисел без сравнения - PullRequest
11 голосов
/ 25 января 2009

Можно ли найти наибольшее из двух целых чисел без какого-либо сравнения? Я нашел несколько решений:

if(!(a/b)) // if a is less than b then division result will be zero.
{
    cout << " b is greater than a";
}
else if (!(a-b)) // we know a is greater than or equal to b now.  check whether they are equal.
{
    cout << "a and b are equal";
}
else
    cout << "a is greater than b";

Но если (c) или if (! C) это сравнение с нулем. Кроме того, он не работает для отрицательных чисел. На самом деле мне нужно решение, которое избегает любого заявления if. Вместо этого я должен использовать операторы switch и арифметические операторы. Thanx.

Ответы [ 13 ]

0 голосов
/ 25 января 2009
void greater(int a, int b) {
    int c = a - b;
    switch(c) {
        case 0:
            cout << "a and b are equal" << endl;
            break;
        default:
            int d = c & (1<<31);
            switch(d) {
                case 0:
                    cout << "a is bigger than b" << endl;
                    break;
                default:
                    cout << "a is less than b" << endl;
            }
    }
}
0 голосов
/ 25 января 2009

Я просто не вижу какой-либо веской причины для этого: кто захочет программировать без «если»?

возможный ответ:

((a + b) + abs (a -b)) / 2

Я полагаю, что "abs" просто где-то скрывает "если", так же как троичный оператор, который является просто другим именем для "если" ...

0 голосов
/ 25 января 2009
(!(a/b) ?  cout << " b is greater than a" : (!(b-a) ? cout << "a and b are equal" :  cout << "a is greater than b") :  cout << "a is greater than b");

Это немного грязно, хотя

Редактировать: Это домашнее задание?

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