`
20386053
  • 浏览: 430588 次
文章分类
社区版块
存档分类
最新评论

LeetCode Divide Two Integers 不使用除号取模乘号实现两数相除

 
阅读更多

Divide Two Integers

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

不使用乘法,除法和模操作实现除法运算。

思路就是用被除数减去除数,减尽为止,如下面程序。

int divide(int dividend, int divisor) 
	{
		//这里的dividend如果不加long long或者加double, 就会当是INT_MIN的时候溢出
		long long a = abs((long long)dividend);
		long long b = abs((long long)divisor);

		int result = 0;
		while (a >= b)
		{
			a -= b;
			result++;
		}
		return (dividend>>31 ^ divisor>>31)? -result:result;
	}


不过很可惜,上面的程序是无法通过的,因为需要优化一下。上面的程序是基本思想,所以,先要知道这个程序。

下面是两个优化的程序,都可以AC。

	int divide2(int dividend, int divisor) 
	{
		//这里的dividend如果不加long long或者加double, 就会当是INT_MIN的时候溢出
		long long a = abs((long long)dividend);
		long long b = abs((long long)divisor);

		int result = 0;
		while (a >= b)
		{
			int count = 0;
			while (a >= b<<(count+1)) count++;
			a -= b<<count;
			result += 1<<count;
		}
		return (dividend>>31 ^ divisor>>31)? -result:result;
	}

	int divide3(int dividend, int divisor)
	{
		long long a = abs((long long)dividend);
		long long b = abs((long long)divisor);

		int result = 0;
		while (a >= b)
		{
			int count = 0;
			while (a >= b<<count) 
			{
				result += 1<<count;
				a -= b<<count;
				count++;
			}			
		}
		return (dividend > 0) ^ (divisor > 0) ? -result : result;
	}


分享到:
评论

相关推荐

    LeetCode 29. 两数相除

    将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例...

    Leetcode 两数相除.kt

    LeetCode问题29要求实现两个整数的除法,但不能使用乘法、除法和mod运算符。问题要求返回被除数除以除数的商。在这里,我们可以使用减法来模拟除法的过程,但为了提高效率,我们通常采用位操作和减法的结合来实现。...

    python-leetcode面试题解之第29题两数相除-python题解.zip

    python python_leetcode面试题解之第29题两数相除_python题解

    c++-c++编程基础之leetcode题解第29题两数相除.zip

    c++ c++_c++编程基础之leetcode题解第29题两数相除

    LeetCode2 Add Two Numbers

    You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return ...

    leetcode add two numbers

    自己写的一个完整的程序,包括main函数,在VS上面提交通过,但是放到leetcode上面会出现问题;只是作为一个参考,一起学习学习0.o!解决的问题有:第一:两个链表的最后一个值相加后进位的问题;第二:两个链表的...

    两数相除1

    两数相除1

    Rogerspy#LeetCode-Py-1#0029. 两数相除1

    可以把被除数和除数当做二进制,这样进行运算的时候,就可以通过移位运算来实现二进制的乘除。如果当前被除数大于等于除数,则将 1 左移 count 位,即为当前位的

    aspire-t#LeetCode-Record#29. 两数相除1

    //进来发现 当前被除数&lt;除数 返回0/* 60/8 = 4+(60-32)/8 =4+2+(28-16)/8 = 4+2+1+(12-8)/8 = 4+2+1

    Leetcode two sum java 解法

    Leetcode two sum java 解法

    用C语言实现Leetcode题目.zip

    用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现...

    leetcode答案-Two-Sum:leetcode两数之和代码

    但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 在这里,采用了C++和Python两种语言和三种方法解答。其中,暴力解法最为...

    leetcode叫数-python01:Python01

    就是说不用乘法,除法,求模运算来实现两个整数相除。如果溢出,返回MAX_INT。看起来很简单,我可以用除数减去被除数,直到除数小于被除数,记录减法操作的次数即可。假设是计算m/n,那么时间复杂度为O(m/n)。用...

    LeetCode题解(java语言实现).pdf

    LeetCode题解(java语言实现).pdf

    刷leetcode的记录,C++和Python两种语言的实现.zip

    刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的...

    LeetCode 两数之和C语言源码

    //给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 //你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用 //示例: //给定 nums = [2, 7, 11, 15], target = 9 //因为 nums[0] + nums[1] = ...

    python-leetcode面试题解之两数相加AddTwoNumbers.zip

    python python_leetcode面试题解之两数相加AddTwoNumbers

    python-leetcode面试题解之两数之和TwoSum.zip

    python python_leetcode面试题解之两数之和TwoSum

    LeetCode最全代码

    371 | [Sum of Two Integers](https://leetcode.com/problems/sum-of-two-integers/) | [C++](./C++/sum-of-two-integers.cpp) [Python](./Python/sum-of-two-integers.py) | _O(1)_ | _O(1)_ | Easy | LintCode | ...

    在LeetCode上刷题的记录,目前实现的代码都是C#与t-sql

    在LeetCode上刷题的记录,目前实现的代码都是C#与t-sql 在LeetCode上刷题的记录,目前实现的代码都是C#与t-sql 在LeetCode上刷题的记录,目前实现的代码都是C#与t-sql 在LeetCode上刷题的记录,目前实现的代码都是...

Global site tag (gtag.js) - Google Analytics