C++中:
a % b = c(c可能为负数),有时候要用到数组,而数组下标不能为负数
,因此需要转换为正余数
数学中:
a % b = c(c一定为非负数), 余数的计算公式:
c
=
a
−
⌊
a
b
⌋
⋅
b
c = a - \lfloor \frac{a}{b} \rfloor · b
c=a−⌊ba⌋⋅b
因此常用get_mod()
函数求a 除以 b 的正余数
int get_mod(int a, int b) //求a除以b的正余数(数学意义上的余数,数学意义上的余数都是正的)
{
return ((a % b) + b) % b;
}
测试:
#include <iostream>
using namespace std;
int get_mod(int a, int b)
{
return ((a % b) + b) % b;
}
int main()
{
int a = -4, b = 3;
printf("C++中: %d %% %d = %d\n", a, b, a % b);
printf("数学中: %d %% %d = %d\n", a, b, get_mod(a, b));
return 0;
}
结果:
C++中: -4 % 3 = -1
数学中: -4 % 3 = 2