在数学上,余数一般都是非负整数
可,C++取模会出现负余数,如 -7 % 3 == -1 ,就好像-7前面的负号在运算时不存在,模完之后又添加上去了一样。
如 -1和2应该在模3的意义下相等,但是:
cout << -1 % 3;
输出:-1
cout << 2 % 3;
输出:2
由于有这个坑, 在判断a和b模x后是否相等时,判断语句不能写为a % x == b % x
建议写成两数相减再取模: (a-b) % x == 0
((-1) - 2) % 3 == 0 或 (2 - (-1)) % 3 == 0