LeetCode 29 Divide Two Integers(两个整数相除)(*)
来源:互联网 发布:女生双肩包推荐 知乎 编辑:程序博客网 时间:2024/06/05 08:03
翻译
不用乘法、除法、取余操作,将两个数相除。如果它溢出了,返回MAX_INT
原文
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.
代码
一心扑到了递归上,可惜没能写出来…………烦躁至极还是找了别人的答案……
class Solution {public: int divide(int dividend, int divisor) { if(!divisor) return INT_MAX; if(divisor == 1) return dividend; if(divisor == -1) { if(dividend == INT_MIN) return INT_MAX; else return -dividend; } bool s1 = dividend < 0; bool s2 = divisor < 0; unsigned int nom = s1 ? -dividend : dividend; unsigned int den = s2 ? -divisor : divisor; unsigned int rem = 0; unsigned int quot = 0; for(int i = 31; i >= 0; --i) { rem <<= 1; rem |= (nom >> i) & 1; if(rem >= den) { rem -= den; quot |= (1 << i); } } return s1^s2? -quot : quot; }};
再来两个代码……(惭愧……)
public class Solution{ public int Divide(int dividend, int divisor) { //1. check overflow: 2 ways of over flow 1) 0 divisor; 2) int.Minvalue/(-1) if (divisor == 0 || dividend == int.MinValue && divisor == -1) return int.MaxValue; //2. calculate sign int sign = dividend > 0 ^ divisor > 0 ? -1 : 1, result = 0; long m = Math.Abs((long)dividend), n = Math.Abs((long)divisor); //3. looping from 1 to possible maximum pow(2, x) to add into result while (m >= n) { long subN = n; for (int subCount = 1; m >= subN; subCount <<= 1, subN <<= 1) { m -= subN; result += subCount; } } return result * sign; }}
public class Solution{ public int Divide(int dividend, int divisor) { if (divisor == 1) return dividend; if (dividend == int.MinValue && divisor == -1 || divisor == 0) return int.MaxValue; int sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1, result = 0; long dvd = Math.Abs((long)dividend), dvs = Math.Abs((long)divisor); while (dvd >= dvs) { long sub = dvs; int subR = 1; while (dvd >= (sub << 1)) { sub <<= 1; subR <<= 1; } dvd -= sub; result += subR; } return sign * result; }}
2 0
- LeetCode 29 Divide Two Integers(两个整数相除)(*)
- [LeetCode-29] Divide Two Integers(两个整数相除,不用乘除取余算术符)
- 5.divide-two-integers(两个整数相除)
- LeetCode OJ 之 Divide Two Integers (两个整数相除)
- 【LeetCode-面试算法经典-Java实现】【029-Divide Two Integers(两个整数相除)】
- LeetCode | Divide Two Integers(两个数相除)
- Divide Two Integers 两个整数相除
- Leetcode #29 Divide Two Integers 整数相除 解题报告
- leetcode 29 Divide Two Integers(整数相除)
- Leetcode刷题记——29. Divide Two Integers(整数相除Divide two integers without using multiplication, division)
- 【leetcode-29】Divide Two Integers(C)
- LeetCode(29)Divide Two Integers
- LeetCode (29)Divide Two Integers
- leetCode 29.Divide Two Integers (两整数相除) 解题思路和方法
- LeetCode (31) Divide two integers (不使用 *, /, mod 求两个数相除结果)
- Divide Two Integers 两数相除@LeetCode
- LeetCode----29. Divide Two Integers (两数相除)
- Leetcode笔记(7)Divide Two Integers
- 蛇形填数
- JavaWeb开发基础:JDBC
- swift函数格式
- jquery 点击div 以外窗口隐藏的方法
- JAVA_SE基础——53.什么是异常?
- LeetCode 29 Divide Two Integers(两个整数相除)(*)
- 无法载入共享目标对象‘...rJava.dll’
- 第12周-Swing通用特性-六个色彩标签的框架
- 【PA2014】【BZOJ3714】Kuglarz
- Java内部类
- 南大软院大神养成计划 第一天
- TCP/IP (一) accept建立连接
- Android Studio 使用0-分分钟让你想用它
- 从头认识java-9.3 向容器添加一组数据与容器的打印