# LeetCode 29 Divide Two Integers（两个整数相除）（*）

4011人阅读 评论(0)

## 翻译

不用乘法、除法、取余操作，将两个数相除。

## 原文

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

## 代码

class Solution {
public:
int divide(int dividend, int divisor) {
if(!divisor) return INT_MAX;
if(divisor == 1) return dividend;
if(divisor == -1) {
if(dividend == INT_MIN) return INT_MAX;
else return -dividend;
}

bool s1 = dividend < 0;
bool s2 = divisor < 0;

unsigned int nom = s1 ? -dividend : dividend;
unsigned int den = s2 ? -divisor : divisor;

unsigned int rem = 0;
unsigned int quot = 0;

for(int i = 31; i >= 0; --i) {
rem <<= 1;
rem |= (nom >> i) & 1;
if(rem >= den) {
rem -= den;
quot |= (1 << i);
}
}

return s1^s2? -quot : quot;
}
};

public class Solution
{
public int Divide(int dividend, int divisor)
{
//1. check overflow: 2 ways of over flow 1) 0 divisor; 2) int.Minvalue/(-1)
if (divisor == 0 || dividend == int.MinValue && divisor == -1) return int.MaxValue;
//2. calculate sign
int sign = dividend > 0 ^ divisor > 0 ? -1 : 1, result = 0;
long m = Math.Abs((long)dividend), n = Math.Abs((long)divisor);
//3. looping from 1 to possible maximum pow(2, x) to add into result
while (m >= n)
{
long subN = n;
for (int subCount = 1; m >= subN; subCount <<= 1, subN <<= 1)
{
m -= subN;
result += subCount;
}
}
return result * sign;
}
}
public class Solution
{
public int Divide(int dividend, int divisor)
{
if (divisor == 1) return dividend;
if (dividend == int.MinValue && divisor == -1 || divisor == 0) return int.MaxValue;
int sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1, result = 0;
long dvd = Math.Abs((long)dividend), dvs = Math.Abs((long)divisor);
while (dvd >= dvs)
{
long sub = dvs;
int subR = 1;
while (dvd >= (sub << 1))
{ sub <<= 1; subR <<= 1; }
dvd -= sub;
result += subR;
}
return sign * result;
}
}
2
0

个人资料
• 访问：1611042次
• 积分：24254
• 等级：
• 排名：第327名
• 原创：521篇
• 转载：0篇
• 译文：29篇
• 评论：798条
Billboard：
微博
博客专栏
 UWP通用应用开发 文章：6篇 阅读：18911
 Android 开发 文章：6篇 阅读：19639
 LeetCode 文章：27篇 阅读：88788
 算法 文章：9篇 阅读：77085
 Windows App开发 文章：37篇 阅读：140476
 欧拉工程 文章：0篇 阅读：0
 OpenCV归纳 文章：5篇 阅读：21122
 Scheme归纳 文章：13篇 阅读：67913
 SICP练习 文章：151篇 阅读：280116
最新评论