2016-06-05 2 views
4

Я пытался решить следующую проблему: https://leetcode.com/problems/add-digits/Числовой добавление в C++

Следующий метод принял 12ms завершить все испытания:

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

тогда следующие брали только 8ms:

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

Почему существует такая значительная разница, когда я добавляю 1 в конце, а не в начале? Должны ли мы всегда ставить константы в конце при расчете?

+0

Я думаю leetcode измеряет время для вас, но эти результаты надежно reprocucable? Вы всегда получаете одинаковые цифры? Вы пробовали другие варианты? Например. что-то вроде 'int result = 1; return result + ((num-1)% 9);' vs 'int result = ((num-1)% 9); return result + 1;' vs 'int result = ((num-1)% 9); return 1 + result; '? – user463035818

+2

Пожалуйста, опубликуйте компилятор и его аргументы. Я буквально не могу заставить компиляторы генерировать другой код для этих функций. –

+0

@ tobi303 Я всегда получаю одинаковые цифры. –

ответ

0

Это не воспроизводимо. Обе версии генерируют точно такой же код сборки в нескольких компиляторах. Выходные данные также совпадают с -O3.

Пожалуйста, см https://godbolt.org/g/K6PZM5