Как мне сделать модуль в C ++? - PullRequest
4 голосов
/ 06 апреля 2010

Как мне выполнить операцию мода между двумя целыми числами в C ++?

Ответы [ 6 ]

14 голосов
/ 06 апреля 2010

В c ++ используйте оператор%

Дополнительная справка

10 голосов
/ 06 апреля 2010

Как уже говорилось в других ответах, вы можете использовать оператор C ++%. Но имейте в виду, что есть морщина, о которой еще никто не упомянул: в выражении a % b, что если a отрицательно? Должен ли результат этой операции быть положительным или отрицательным? Стандарт C ++ оставляет это до реализация. Так что если вы хотите обрабатывать отрицательные входные данные переносимым образом, вам, вероятно, следует сделайте что-то вроде r = abs(a) % b, затем исправьте знак r в соответствии с вашими требованиями.

9 голосов
/ 06 апреля 2010

C ++ имеет оператор %, который иногда и вводит в заблуждение как «модуль». В частности, STL имеет функтор modulus<> в заголовке <functional>. Заметьте, это не оператор математического модуля, потому что в модуле арифметики a mod b по определению оценивается как неотрицательное значение для любого значения a и любого положительного значения b. В C ++ знак результата a % b является определяемым реализацией , если один из аргументов является отрицательным. Таким образом, мы бы более правильно назвали оператор % оператором Остаток .

Тем не менее, если вы действительно хотите оператор математического модуля, то вы можете определить функцию, которая будет делать именно это:

template<typename V>
V mod(const V& a, const V& b)
{
    return (a % b + b) % b;
}

До тех пор, пока b является положительным значением, вызов вышеуказанной функции даст неотрицательный результат.

9 голосов
/ 06 апреля 2010

Как это: х = у% г

1 голос
/ 06 апреля 2010

Используя модуль %, оператор:

int modulus_a_b = a % b;
0 голосов
/ 02 мая 2012

если вы используете двойную переменную, вы должны использовать;

double x;
double y;
double result = fmod(x, y);
...