如果两个操作数为正,除法和取模操作的操作的结果也是正数(或零);如果两个操作数都为负数,除法的操作的结果也为正数(或零),而求模操作的结果则为负数(或零);如果只有一个操作数为负,这两种操作的结果取决于机器;求模结果的符号也取决于机器,而除法操作的值则是负数(或零):C++ Primer中文第四版130页
在gcc(Linux版,Windows应该也一样)下试了一下:
21%-5=1
21/-5=-4
就是说,取余操作的符号取决于分子,结果向零一侧取整,除法的结果直接把小数截去。
USACO上一个题(Broken Necklace)需要mod函数,他是这样解决的:
/*
* Return n mod m. The C % operator is not enough because
* its behavior is undefined on negative numbers.
*/
int
mod(int n, int m)
{
while(n < 0)
n += m;
return n%m;
}
没有评论:
发表评论