力扣题目解析--两数相除

server/2024/12/25 14:03:37/

题目

给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。

返回被除数 dividend 除以除数 divisor 得到的  。

注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 [−231,  231 − 1] 。本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 -231 ,则返回 -231 。

示例 1:

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = 3.33333.. ,向零截断后得到 3 。

示例 2:

输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = -2.33333.. ,向零截断后得到 -2 。

提示:

  • -231 <= dividend, divisor <= 231 - 1
  • divisor != 0

 代码展示

class Solution {
public:int divide(int dividend, int divisor) {if (divisor == 0) {throw std::invalid_argument("Division by zero is undefined.");}if (dividend == INT_MIN && divisor == -1) {return INT_MAX;}int64_t ShangShu = static_cast<int64_t>(dividend) / divisor;if (ShangShu > INT_MAX) {return INT_MAX;} else if (ShangShu < INT_MIN) {return INT_MIN;}return static_cast<int>(ShangShu);}
};

代码的逐行解释

        if (divisor == 0) {throw std::invalid_argument("Division by zero is undefined.");}
  • 除以零检查:首先检查 divisor 是否为零。如果 divisor 是零,则抛出一个 std::invalid_argument 异常,并附带一条消息说明除以零是未定义的行为。这是为了防止程序执行到后续代码时出现运行时错误。
        if (dividend == INT_MIN && divisor == -1) {return INT_MAX;}
  • 溢出处理:特别处理当 dividend 是 INT_MIN(即 -2147483648)且 divisor 是 -1 的情况。这种情况下,理论上结果应该是 2147483648,但这个值超出了 int 类型的最大值 2147483647,因此会导致溢出。为了避免这种情况,直接返回 INT_MAX(即 2147483647),这是 int 类型的最大可能值。
        int64_t ShangShu = static_cast<int64_t>(dividend) / divisor;
  • 执行除法:将 dividend 转换为 int64_t 类型后进行除法运算,以确保中间计算不会溢出。int64_t 是 64 位有符号整数类型,可以容纳更大的数值范围。结果存储在 ShangShu 变量中。
        if (ShangShu > INT_MAX) {return INT_MAX;} else if (ShangShu < INT_MIN) {return INT_MIN;}
  • 结果范围检查:检查 ShangShu 是否超出了 int 类型的范围:
    • 如果 ShangShu 大于 INT_MAX(即 2147483647),则返回 INT_MAX
    • 如果 ShangShu 小于 INT_MIN(即 -2147483648),则返回 INT_MIN。 这样做的目的是确保最终返回的结果始终在 int 类型的有效范围内。
        return static_cast<int>(ShangShu);}
};
  • 返回结果:如果 ShangShu 在 int 类型的有效范围内,则将其转换回 int 类型并返回。这一步保证了返回值是一个有效的 int 类型。

http://www.ppmy.cn/server/153052.html

相关文章

微调大模型时,如何进行数据预处理? 将<input, output>转换为模型所需的<input_ids, labels, attention_mask>

原始训练数据集格式如下&#xff1a; <input, output> 形式&#xff1a;字符 模型训练所需数据格式如下&#xff1a; # tokenizer处理后 return {"input_ids": example,"labels": labels,"attention_mask": example_mask, } 将字符转…

鸿蒙项目云捐助第十七讲云捐助我的页面上半部分的实现

鸿蒙项目云捐助第十七讲云捐助我的页面上半部分的实现 在一般的应用app中都会有一个“我的”页面&#xff0c;在“我的”页面中可以完成某些设置&#xff0c;也可以完成某些附加功能&#xff0c;如“修改密码”等相关功能。这里的鸿蒙云捐助也有一个“我的”功能页面。这里对“…

第二节:让电机转起来【51单片机-L298N-步进电机教程】

摘要&#xff1a;本节介绍用简单的方式&#xff0c;让步进电机转起来。其目的之一是对电机转动有直观的感受&#xff0c;二是熟悉整个开发流程 本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分&#xff0c;可先行学习 一、软件清单 需要用到的软件有keil5编译…

opencv sdk for java中提示无stiching模块接口的问题

1、问题介绍 安卓项目中有新的需求&#xff0c;在 jni 中增加 stiching_detail.cpp 中全景拼接的实现。 但是在编译时&#xff0c;出现大量报错&#xff0c;如下截图所示 实际上&#xff0c;其他opencv的接口函数 例如 core dnn等都能正常使用&#xff0c;直觉上初步怀疑 ope…

原点安全再次入选信通院 2024 大数据“星河”案例

近日&#xff0c;中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织开展的 2024 大数据“星河&#xff08;Galaxy&#xff09;”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…

SQL Server 数据库更新调用外部HTTP请求

sql server developer 当插入数据和update数据的时候能否调用http请求 https://learn.microsoft.com/zh-cn/sql/relational-databases/clr-integration/database-objects/getting-started-with-clr-integration?viewsql-server-ver15&tabscs 步骤 2: 创建 CLR 程序集 set …

简单了解函数递归

函数递归 一 了解函数递归二 深入理解函数递归的思想三 函数递归的优缺点 一 了解函数递归 首先&#xff0c;我们通过一个简单的代码来理解函数递归。 #include<stdio.h> int Func() {return Func(n1); } int main() {int n 5;Func(n);return 0; }这个就是函数递归&am…

畅捷通T+13管理员密码任意重置漏洞

复现版本 畅捷通13 漏洞复现 POST /tplus/ajaxpro/RecoverPassword,App_Web_recoverpassword.aspx.cdcab7d2.ashx?methodSetNewPwd HTTP/1.1 Host: 192.168.1.8:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0 Accept…