问题:如何再不调用%运算符的情况下高效实现两个整数的取模运算? 解答思路: 借鉴求取两个整数最大公约数的算法中【更相减损术】的思路,【被除数%除数】=【(被除数-N*除数)%除数】,通过把【被除数-N*除数】赋值给被除数来不断缩小被除数的大小,直到最终被除数小于除数,那么此时的被除数即为余数,其中0<=Npublic static int mod(int dividend, int divisor){ if(dividend==divisor){ return 0; } long c=divisor; while(dividend > divisor) { if(dividend>=c) { c<<=1; continue; } c>>=1; if(dividend-c>=0){ dividend -= c; } } return dividend; }备注:由于JAVA中没有无符号整数,因此变量c需要定义为long型,否则c左移可能会导致溢出,造成被除数和c判断大小出错。



