2016-06-05 16 views
4

Ich habe versucht, das folgende Problem zu lösen: https://leetcode.com/problems/add-digits/Numerische Zusatz in C++

Die folgende Methode 12ms hat alle Tests abgeschlossen:

int addDigits(int num) { 
    return 1+((num-1)%9); 
} 

während die folgenden nur 8ms nahm:

int addDigits(int num) { 
    return ((num-1)%9)+1; 
} 

Warum gibt es so einen signifikanten Unterschied, wenn ich am Ende 1 anstelle des Anfangs hinzufüge? Sollten wir bei der Berechnung immer Konstanten am Ende setzen?

+0

Ich denke, leetcode ist die Zeit für Sie zu messen, aber diese Ergebnisse sind zuverlässig reprocucable? Hast du immer die gleichen Nummern? Hast du andere Varianten probiert? Z.B. etwas wie "int result = 1; Ergebnis zurückgeben + ((num-1)% 9);' vs 'int Ergebnis = ((num-1)% 9); Ergebnis zurückgeben + 1;' vs 'int Ergebnis = ((num-1)% 9); return 1 + Ergebnis; '? – user463035818

+2

Bitte, post-Compiler und seine Argumente. Ich kann buchstäblich Compiler nicht dazu bringen, anderen Code für diese Funktionen zu erzeugen. –

+0

@ tobi303 Ich bekomme immer die gleichen Nummern. –

Antwort

0

Dies ist nicht reproduzierbar. Beide Versionen erzeugen unter mehreren Compilern genau den gleichen Assemblercode. Der Ausgang ist auch der gleiche mit -O3.

Bitte sehen https://godbolt.org/g/K6PZM5