leetcode:Divide Two Integers

一、题目

不使用乘法、除法、求余运算实现除法运算,,除数和被除数、结果都是用int型。

如果溢出就返回MAX_INT。

二、分析

看到题目后我立马想到了计算机组成原理中的一位除法和二位除法,不过想想在这里实现起来又是太麻烦了。

class Solution {public:int divide(int dividend, int divisor) {int count = 0;int flag = 1;if(dividend < 0)flag = -flag;if(divisor < 0)flag = -flag;dividend = abs(dividend);divisor = abs(divisor);while(dividend > 0){dividend -= divisor;count ++;}return flag * count;}};

class Solution {public:int divide(int dividend, int divisor) {if(dividend == 0 || divisor == 1)return dividend;int count = 0;int flag = 1;if(dividend < 0)flag = -flag;if(divisor < 0)flag = -flag;long pdividend = abs((long)dividend);long pdivisor = abs((long)divisor);while(pdividend >= pdivisor){int n = 0;while(pdividend >= pdivisor<<(n + 1))n++;pdividend -= pdivisor<<n;count += 1<<n;}count = flag * count;if(count <= -2147483648 || count > 2147483647)return 2147483647;return count;}};

有我们特有的记忆,亲情之忆友谊之花爱情之树以及遗憾之泪!

leetcode:Divide Two Integers

相关文章:

你感兴趣的文章:

标签云: