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;
}
分享到:
相关推荐
将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例...
LeetCode问题29要求实现两个整数的除法,但不能使用乘法、除法和mod运算符。问题要求返回被除数除以除数的商。在这里,我们可以使用减法来模拟除法的过程,但为了提高效率,我们通常采用位操作和减法的结合来实现。...
python python_leetcode面试题解之第29题两数相除_python题解
c++ c++_c++编程基础之leetcode题解第29题两数相除
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 ...
自己写的一个完整的程序,包括main函数,在VS上面提交通过,但是放到leetcode上面会出现问题;只是作为一个参考,一起学习学习0.o!解决的问题有:第一:两个链表的最后一个值相加后进位的问题;第二:两个链表的...
两数相除1
可以把被除数和除数当做二进制,这样进行运算的时候,就可以通过移位运算来实现二进制的乘除。如果当前被除数大于等于除数,则将 1 左移 count 位,即为当前位的
//进来发现 当前被除数<除数 返回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 解法
用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现...
但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 在这里,采用了C++和Python两种语言和三种方法解答。其中,暴力解法最为...
就是说不用乘法,除法,求模运算来实现两个整数相除。如果溢出,返回MAX_INT。看起来很简单,我可以用除数减去被除数,直到除数小于被除数,记录减法操作的次数即可。假设是计算m/n,那么时间复杂度为O(m/n)。用...
LeetCode题解(java语言实现).pdf
刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的记录,C++和Python两种语言的实现.zip刷leetcode的...
//给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 //你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用 //示例: //给定 nums = [2, 7, 11, 15], target = 9 //因为 nums[0] + nums[1] = ...
python python_leetcode面试题解之两数相加AddTwoNumbers
python python_leetcode面试题解之两数之和TwoSum
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上刷题的记录,目前实现的代码都是...