CODE 104: Divide Two Integers
2013-11-03 16:35
260 查看
Divide two integers without using multiplication, division and mod operator.
public int divide(int dividend, int divisor) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. if (divisor == 1) { return dividend; } else if (divisor == -1) { return -dividend; } else if (Math.abs(divisor) == 2) { int number = dividend >> 1; if (divisor < 0) { return -number; } return number; } long ldividend = 0L; long ldivisor = 0L; boolean isDividendFuShu = false; boolean isDivisorFuShu = false; if (divisor < 0) { isDivisorFuShu = true; ldivisor = Math.abs((long) divisor); } else { ldivisor = divisor; } if (dividend < 0) { isDividendFuShu = true; ldividend = Math.abs((long) dividend); } else { ldividend = dividend; } long start = 0l; long end = ldividend; while (start < end - 1) { long mid = start + (end - start) / 2; long tmpNumber = add(mid, ldivisor); if (tmpNumber < ldividend) { start = mid; } else if (tmpNumber > ldividend) { end = mid; } else { if ((isDividendFuShu && !isDivisorFuShu) || (!isDividendFuShu && isDivisorFuShu)) { return -(int) mid; } else { return (int) mid; } } } if ((isDividendFuShu && !isDivisorFuShu) || (!isDividendFuShu && isDivisorFuShu)) { return -(int) start; } else { return (int) start; } } long add(long p, long num) { if (0 == p) { return 0; } long tmp = add(p >> 1, num) << 1; if ((p & 1) != 0) { tmp += num; } return tmp; }
相关文章推荐
- android手机的刷机
- C++/C const问题
- 原子操作
- 排序 -- 总结
- SSH Without a Password(SSH无密码登录)
- 要静下心来好好科研了
- Android Fragment使用和学习
- 【KMP】hdu 1686 Oulipo(外:hdu 2203 亲和串)
- C#:Lambda 表达式
- 那些天,一个应届研究生在上海找工作
- ScreenCapture-HDwik5.0整合教程
- bat 导出mysql数据库数据
- mongodb的简单使用
- JavaScript日历选择器
- 美团笔试题--蓄水池蓄水量问题
- JavaScript中使用Substring删除字符串最后一个字符
- Hashtable
- Ubuntu 12.04如何修改背景色
- 【KMP】hdu 1867 A + B for you again(外:hdu 2594 Simpsons’ Hidden Talents)
- Javascript模式(第二章基本技巧)------读书笔记