[leetcode Q29] Divide Two Integers
2016-02-29 13:08
176 查看
1. 题目
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.
要求不使用乘除法实现两个整数相除运算。
2. 思路
不使用乘法除法,要想快数得到结果就只能考虑位运算。本题主要考察位运算。被除数减去一次除数,结果 + 1
被除数减去
2 x 除数,结果 + 2
被除数减去
4 x 除数,结果 + 4
……
需要注意整数溢出
如输入:
[code]-2147483648 1 -2147483648 -1
3. 实现
[code]class Solution { public: int divide(int dividend, int divisor) { // Note: The Solution object is instantiated only once. if (divisor == 1) return dividend; long long a = abs((double)dividend); long long b = abs((double)divisor); long long res = 0; while(a >= b) { long long c = b; for(int i = 0; a >= c; i++, c <<=1) { a -= c; res += 1<<i; } } if (res == 0x80000000) return 2147483647; else return ((dividend ^ divisor) >> 31) ? (-res) : (res); } };
相关文章推荐
- iOS开发技巧系列---打造强大的BaseModel
- Unity Tween tool
- Android4.1输入系统参数配置和输入事件校准
- 关于开源框架GPUImage 的简单说明
- C# 网络打印机ESC指令打印小票
- Android Studio中如何重命名文件
- UIKit框架(8)屏幕适配(一)
- iOS中创建.gitignore文件
- Android4.1输入子系统框架介绍和性能分析
- TCP/IP
- make ARCH=arm sama5_defconfig
- UI控件常见的属性
- java中的常用包
- 需求管理之勇于直面需求变更
- Linux下用命令格式化U盘
- JQuery Datatable用法
- mybatis
- hrbust 1283 又见皇后【dfs】
- Session机制详解
- 点滴记录——Centos 6.5 yum安装Ganglia