广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现LeetCode(29.两数相除)
  • 854
分享到

C++实现LeetCode(29.两数相除)

2024-04-02 19:04:59 854人浏览 安东尼
摘要

[LeetCode] 29. Divide Two Integers 两数相除 Given two integers dividend and divi

[LeetCode] 29. Divide Two Integers 两数相除

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.

Return the quotient after dividing dividend by divisor.

The integer division should truncate toward zero.

Example 1:

Input: dividend = 10, divisor = 3
Output: 3

Example 2:

Input: dividend = 7, divisor = -3
Output: -2

Note:

  • Both dividend and divisor will be 32-bit signed integers.
  • The divisor will never be 0.
  • Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 231 − 1 when the division result overflows.

这道题让我们求两数相除,而且规定不能用乘法,除法和取余操作,那么这里可以用另一神器位操作 Bit Manipulation,思路是,如果被除数大于或等于除数,则进行如下循环,定义变量t等于除数,定义计数p,当t的两倍小于等于被除数时,进行如下循环,t扩大一倍,p扩大一倍,然后更新 res 和m。这道题的 OJ 给的一些 test case 非常的讨厌,因为输入的都是 int 型,比如被除数是 -2147483648,在 int 范围内,当除数是  -1 时,结果就超出了 int 范围,需要返回 INT_MAX,所以对于这种情况就在开始用 if 判定,将其和除数为0的情况放一起判定,返回 INT_MAX。然后还要根据被除数和除数的正负来确定返回值的正负,这里采用长整型 long 来完成所有的计算,最后返回值乘以符号即可,代码如下:

解法一:


class Solution {
public:
    int divide(int dividend, int divisor) {
        if (dividend == INT_MIN && divisor == -1) return INT_MAX;
        long m = labs(dividend), n = labs(divisor), res = 0;
        int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
        if (n == 1) return sign == 1 ? m : -m;
        while (m >= n) {
            long t = n, p = 1;
            while (m >= (t << 1)) {
                t <<= 1;
                p <<= 1;
            }
            res += p;
            m -= t;
        }
        return sign == 1 ? res : -res;
    }
};

我们可以通过递归的方法来解使上面的解法变得更加简洁:

解法二:


class Solution {
public:
    int divide(int dividend, int divisor) {
        long m = labs(dividend), n = labs(divisor), res = 0;
        if (m < n) return 0;
        long t = n, p = 1;
        while (m > (t << 1)) {
            t <<= 1;
            p <<= 1;
        }
        res += p + divide(m - t, n);
        if ((dividend < 0) ^ (divisor < 0)) res = -res;
        return res > INT_MAX ? INT_MAX : res;
    }
};

到此这篇关于c++实现LeetCode(29.两数相除)的文章就介绍到这了,更多相关C++实现两数相除内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现LeetCode(29.两数相除)

本文链接: https://www.lsjlt.com/news/130434.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现LeetCode(29.两数相除)
    [LeetCode] 29. Divide Two Integers 两数相除 Given two integers dividend and divi...
    99+
    2022-11-12
  • C++中怎么利用LeetCode实现两数相除
    这篇文章将为大家详细讲解有关C++中怎么利用LeetCode实现两数相除,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。[LeetCode] 29. Divide Two Integers 两...
    99+
    2023-06-20
  • C++如何实现两数相除
    本篇内容介绍了“C++如何实现两数相除”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Divide Two Integers 两数相除Give...
    99+
    2023-06-19
  • C++实现LeetCode(2.两个数字相加)
    [LeetCode] 2. Add Two Numbers 两个数字相加 You are given two non-empty linked lists rep...
    99+
    2022-11-12
  • C++如何实现LeetCode两个数字相加
    这篇文章将为大家详细讲解有关C++如何实现LeetCode两个数字相加,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。[LeetCode] 2. Add Two Numbers 两个数字相加You are ...
    99+
    2023-06-20
  • C语言怎么实现两数相除
    本篇内容介绍了“C语言怎么实现两数相除”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两数相除,如果有余数,输出余数。实例#include &...
    99+
    2023-06-17
  • LeetCode如何实现两个数字相加
    小编给大家分享一下LeetCode如何实现两个数字相加,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,...
    99+
    2023-06-19
  • php如何实现两个数相除
    这篇文章主要介绍了php如何实现两个数相除的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何实现两个数相除文章都会有所收获,下面我们一起来看看吧。在PHP中,除法运算使用斜杠(/)进行表示,例如12/3就...
    99+
    2023-07-06
  • php怎么实现两数相除取整
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php实现两数相除取整,可分成两个部分看:两数相除:可利用“/”运算符进行除法运算取整:可利用取整函数对除法运算的结果进行取整而PHP取整数函数常用的四种方法:直接取整...
    99+
    2018-10-30
    php 相除取整
  • php如何实现两数相除取整
    这篇文章主要为大家分析了php如何实现两数相除取整的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“php如何实现两数相除取整”的知识吧。php实现两数相除取整...
    99+
    2023-06-28
  • C++实现LeetCode(67.二进制数相加)
    [LeetCode] 67. Add Binary 二进制数相加 Given two binary strings a and b, return...
    99+
    2022-11-12
  • C++实现LeetCode(201.数字范围位相与)
    [LeetCode] 201.Bitwise AND of Numbers Range 数字范围位相与 Given a range [m, n] where 0 <=...
    99+
    2022-11-12
  • C++实现LeetCode(两个有序数组的中位数)
    [LeetCode] 4. Median of Two Sorted Arrays 两个有序数组的中位数 There are two sorted arrays nums1...
    99+
    2022-11-12
  • php怎么实现相除保留两位小数
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php实现相除保留两位小数,可分成两个部分看:两数相除:可利用“/”运算符进行除法运算保留两位小数:可利用number_format()或sprintf()函数对除法运...
    99+
    2021-10-24
    php 相除 保留两位小数
  • php如何实现相除保留两位小数
    这篇文章主要为大家展示了“php如何实现相除保留两位小数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何实现相除保留两位小数”这篇文章吧。php实现相除保留两位小数的方法:1、利用“/”...
    99+
    2023-06-29
  • C++实现LeetCode(43.字符串相乘)
    [LeetCode] 43. Multiply Strings 字符串相乘 Given two non-negative integers num1 and...
    99+
    2022-11-12
  • C++实现LeetCode(100.判断相同树)
    [LeetCode] 100. Same Tree 判断相同树 Given two binary trees, write a function to check if they a...
    99+
    2022-11-12
  • C++实现LeetCode(27.移除元素)
    [LeetCode] 27. Remove Element 移除元素 Given an array nums and a value val, remo...
    99+
    2022-11-12
  • C++实现算法两个数字相加详解
    Add Two Numbers 两个数字相加 You have two numbers represented by a linked list, where each n...
    99+
    2022-11-12
  • C++如何实现算法两个数字相加
    这篇文章主要为大家展示了“C++如何实现算法两个数字相加”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何实现算法两个数字相加”这篇文章吧。Add Two Numbers 两个数字相加Yo...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作