本文共 790 字,大约阅读时间需要 2 分钟。
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
class Solution {public: int divide(int dividend, int divisor) { long res = 0, up = abs(dividend), down = abs(divisor); while(up >= down){ long count = 1, flag = down; //'<<'意味着二进制码向左移1位,十进制乘二 while(up > (flag << 1)){ count <<= 1; flag <<= 1; } res += count; up -= flag; } //'^'异或,两者都为真或两者都为假时表达式为假,否则为真。 res = ((dividend < 0)^(divisor < 0)) ? -res : res; return (res > INT_MAX || res < INT_MIN) ? INT_MAX : res; }};
通过时间:
转载地址:http://viemb.baihongyu.com/