2010-12-20 10 views
1

kann jemand bitte erarbeiten, wie die größte von vier Zahlen ohne Bedingungsoperator zu finden.für 3 Zahlen habe ich aber für vier Zahlen, wie man verschiedene Vergleiche schreiben.größte Zahl ohne bedingten Operator

+9

Ist das eine Hausaufgabenfrage? Außerdem sollten Sie mehr Antworten akzeptieren. –

+1

Zeigen Sie Ihr Beispiel. Ist * ohne bedingte Operationen zu verwenden * bedeutet, dass Sie versteckte verwenden können? – ruslik

Antwort

1

Es ist eine Standardmethode min oder max in 2er-Komplement-Arithmetik zu berechnen, ohne conditionals mit:

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); 
} 

kann es leicht skaliert werden.

1
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; 
} 

Dieser Code dient zum Vergleich zweier Zahlen. Machen Sie diesen Vergleich für alle Zahlen.

+0

'==' ist ein bedingter Operator –

+3

Dann wechseln Sie das if/else und verwenden Sie 'if (temp)'. –

+2

'abs()' hat eine versteckte Bedingung. – ruslik

1

können Sie maximal zwei Nummern finden a, b durch folgenden Trick:

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

verlängert den Trick für so viele Zahlen wie du willst.

Verwandte Themen