博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Divide Two Integers
阅读量:5096 次
发布时间:2019-06-13

本文共 1009 字,大约阅读时间需要 3 分钟。

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

If it is overflow, return MAX_INT.

 

思路:实现两个整数的除法,不能使用乘法,除法和移位操作。首先想到的是减法,但是减法速度太慢,比如10000000/1,总共需要10000000次减法,所以不适用。

因不能使用乘法,可以使用移位操作来代替乘法。本质上就是:(x+y)/m = x/m + y/m。m左移一位,就相当于乘以了2,依次类推。

代码如下:

 

int divide(int dividend, int divisor) {    unsigned res = 0;        if(divisor == 0)    return 0x7fffffff;        unsigned int posdividend = (dividend < 0)?-dividend:dividend;    unsigned int posdivisor = (divisor < 0)?-divisor:divisor;        while(posdividend >= posdivisor)    {    	int n = 0;    	unsigned int tmp = posdivisor;    	while(tmp <= posdividend)    	{    		tmp <<= 1;    		n++;    		if(tmp == 0)break;    	}	    	res += 1 << (n-1);		if(tmp == 0)	posdividend -= 0x80000000;		else    	posdividend -= tmp>>1;    	    }    if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0))        return -res;    if(res == 0x80000000)   return 0x7fffffff;    return res;    }

 

  

 

转载于:https://www.cnblogs.com/gqtcgq/p/7247147.html

你可能感兴趣的文章
Linux 学习手记(6): 磁盘、分区、MBR与GPT
查看>>
【ES6】var / let / const
查看>>
bootstrap-multiselect 的简单使用,样式修改,动态创建option
查看>>
【转载】malloc内存分配与free内存释放的原理
查看>>
ftp、ssh
查看>>
代码16
查看>>
size和len
查看>>
4种方式配置不同作用域的jvm的堆栈内存!
查看>>
Java学习日记----交通灯管理系统
查看>>
禁止浏览器的前进与后退
查看>>
ajax 设置Access-Control-Allow-Origin实现跨域访问
查看>>
截图方式预览文件
查看>>
opencv中的高维矩阵Mat
查看>>
vm ubuntu如何设置全屏
查看>>
selenium webdriver ChromeOptions
查看>>
课堂练习—数组最大值
查看>>
[HNOI2007]最小矩形覆盖
查看>>
人生难免有几次踩到大便的时候
查看>>
安卓开发利器 谷歌发布Android Studio工具
查看>>
超时设置
查看>>