【题目】
Divide
two integers without using multiplication, division and mod operator.
【题意】
计算两个数的商,不能使用乘、除、取余操作
【思路】
用加法,确定多少除数相加其和恰好<=被除数
为了提高算法效率,利用贪心思想,采用滚雪球式的翻倍叠加策略,使和快速逼近被除数
几种特殊情况需要注意:
1. 结果是负数
2. 除数的绝对值要比被除数的绝对值大
3. 除数是0
4. 被除是0
5. 注意除数翻倍累加时越界,超过int的上界
【代码】
class Solution { public: int divide(int dividend, int divisor) { if(divisor==0 || dividend==0)return 0; if(divisor==1)return dividend; if(divisor==-1)return 0-dividend; bool isNegative=false; if((dividend<0&&divisor>0)||(dividend>0&&divisor<0))isNegative=true; //判断正负 long long dend=dividend; long long dsor=divisor; long long totalSum=0; //为了防止越界情况的发生,使用long long类型 long long sum=0; int totalCount=0; int count=0; if(dend<0)dend=abs(dend); //取正 if(dsor<0)dsor=abs(dsor); while(sum+dsor<=dend-totalSum){ count=1; sum=dsor; while(sum+sum<=dend-totalSum){ sum+=sum; count+=count; } totalSum+=sum; totalCount+=count; sum=0; count=0; } if(isNegative)return 0-totalCount; else return totalCount; } };
LeetCode: Divide Two Integers [028]
时间: 2024-10-10 18:30:21