Ответ 1
Просто получите абсолютное значение разницы:
#include <cstdlib>
int diff = std::abs(x-y);
Я собираюсь сделать это на С++, но мне пришлось делать это на нескольких языках, это довольно распространенная и простая проблема, и это последний раз. У меня было достаточно кодирования, как и у меня, я уверен, что должен быть лучший метод, поэтому я отправляю его здесь, прежде чем я напишу тот же длинный метод на другом языке;
Рассмотрим (lilies!) следующий код;
// I want the difference between these two values as a positive integer
int x = 7
int y = 3
int diff;
// This means you have to find the largest number first
// before making the subtract, to keep the answer positive
if (x>y) {
diff = (x-y);
} else if (y>x) {
diff = (y-x);
} else if (x==y) {
diff = 0;
}
Это может показаться мелочным, но для меня это очень похоже, просто чтобы получить разницу между двумя номерами. Это на самом деле вполне разумный способ делать что-то, и я неоправданно педантичен, или мой здравый смысл покалывает с полным основанием?
Просто получите абсолютное значение разницы:
#include <cstdlib>
int diff = std::abs(x-y);
Использование функции std::abs()
- один из ясных способов сделать это, как предложили другие.
Но, возможно, вам интересно кратко написать эту функцию без вызовов библиотеки.
В этом случае
diff = x > y ? x - y : y - x;
- короткий путь.
В ваших комментариях вы предположили, что вас интересует скорость. В этом случае вам могут быть интересны способы выполнения этой операции, для которых не требуется ветвление. Эта ссылка описывает некоторые.
#include <cstdlib>
int main()
{
int x = 7;
int y = 3;
int diff = std::abs(x-y);
}
Хорошо, это зависит от того, что вы подразумеваете под сокращением. Время выполнения Fastet, самая быстрая компиляция, наименьшее количество строк, наименьший объем памяти. Я предполагаю, что вы имеете в виду время выполнения.
#include <algorithm> // std::max/min
int diff = std::max(x,y)-std::min(x,y);
Это два сравнения и одна операция (эта неизбежна, но может быть оптимизирована с помощью определенных побитовых операций с конкретными случаями, однако компилятор может это сделать для вас). Также, если компилятор достаточно умен, он может выполнить только одно сравнение и сохранить результат для другого сравнения. Например, если X > Y, то из первого сравнения вы знаете, что Y < X, но я не уверен, используют ли компиляторы это.