25 - Divide Two Integers
2013-09-25 07:23
232 查看
solution:此题的解法是不断左移divisor和dividend比较大小,先减掉最接近dividend的值,然后右移divisor再减次接近的值,直到dividend为0(表示整除)或者有余数。
需要注意的地方是:
1,保存除数与被除数的正负值,然后取绝对值进行循环;
2,由于INT_MIN=-2147483648的存在,我们会发现abs(INT_MIN)
== INT_MIN, 因此要将其转换为long long 型,中间先有转换为usinged int, 这样也可以。
3,各种边界条件,如被除数为0,除数为0。
需要注意的地方是:
1,保存除数与被除数的正负值,然后取绝对值进行循环;
2,由于INT_MIN=-2147483648的存在,我们会发现abs(INT_MIN)
== INT_MIN, 因此要将其转换为long long 型,中间先有转换为usinged int, 这样也可以。
3,各种边界条件,如被除数为0,除数为0。
class Solution { public: int divide(int dividend, int divisor) { // Start typing your C/C++ solution below // DO NOT write int main() function if( divisor == 0 ) return -1; if( dividend == 0 ) return 0; int positive = 1; if(divisor < 0) // 保存正负值信息 positive *= -1; if(dividend < 0) positive *= -1; long long divis = abs( (long long)divisor ); //用long long避免INT_MIN情况 long long divid = abs( (long long)dividend ); int index = 0; unsigned int mul[32]; while(divis <= divid && divis > 0) { mul[ index ] = divis; divis = divis << 1; index ++; } index --; unsigned int remain = 0; while( index >= 0 && divid > 0) { if( mul[ index ] <= divid ) { divid = divid - mul[ index ]; remain += ( 1<<index ); } index --; } if(positive < 0) return -remain; return remain; } };
相关文章推荐
- C语言中关于数组与指针和字符串与指针的小结
- 【Android病毒分析报告】 - Andorid新病毒“UkyadPay”
- myeclipse6.5注册码
- Oracle Clustered Table
- html页面中如何设置当光标移到一个固定区域时其形状变成手型,移出时恢复
- Interleaving String
- 使用PHP下载CSS文件中的图片的代码
- php排序算法(冒泡排序,快速排序)
- PHP中数组的三种排序方法分享
- PHP插入排序实现代码
- php判断服务器是否支持Gzip压缩功能
- 使用php判断网页是否gzip压缩
- 服务器迁移之debian重新配置Web服务的细节
- js判断选择时间不能小于当前时间的代码
- 线索二叉树Threaded binary tree
- 项目管理:人
- GNU 网络程序
- frame和iframe的区别 ------copy滴
- GNU PID
- Recover Binary Search Tree