标签:divisor truncate res 29 long mid 相除 dividend
难度中等
给定两个整数,被除数 dividend
和除数 divisor
。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend
除以除数 divisor
得到的商。
整数除法的结果应当截去(truncate
)其小数部分,例如:truncate(8.345) = 8
以及 truncate(-2.7335) = -2
示例 1:
输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = truncate(3.33333..) = truncate(3) = 3
示例 2:
输入: dividend = 7, divisor = -3 输出: -2 解释: 7/-3 = truncate(-2.33333..) = -2
class Solution { public: long mul(long a, long k) { long ans = 0; while (k > 0) { if ((k&1) == 1) ans += a; //if ((k%2) == 1) ans += a; k = k >> 1; //k = k/2; a += a; } return ans; } int divide(int dividend_1, int divisor_1) { bool neg = false; long long dividend = dividend_1; long long divisor = divisor_1; if ((dividend^divisor) < 0) { neg = true; } if (divisor < 0) { divisor = -divisor; } if (dividend < 0) { dividend = -dividend; } long long low = 0; long long high = dividend; while(low<=high) { long long mid = low + (high-low)/2; //cout << mid << endl; if (mul(mid,divisor) > dividend) { high = mid -1; } else if (mul(mid,divisor) < dividend) { low = mid +1; } else { long res = neg?-mid:mid; if(res > INT_MAX) res = INT_MAX; if(res <= INT_MIN) res = INT_MIN; return res; } } int res = low-1; if(neg) res = -res; //cout << INT_MIN <<endl; if(res > INT_MAX) return INT_MAX; if(res <= INT_MIN) return INT_MAX; return res; } };
标签:divisor,truncate,res,29,long,mid,相除,dividend 来源: https://www.cnblogs.com/zle1992/p/16632753.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。