题目:001:整数除法


1.给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'、除号 '/' 以及求余符号 '%'

注意:

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31−1]。本题中,如果除法结果溢出,则返回 2^31 − 1

示例 1:

输入:a = 15, b = 2

输出:7

解释:15/2 = truncate(7.5) = 7

示例 2:

输入:a = 7, b = -3

输出:-2

解释:7/-3 = truncate(-2.33333..) = -2

示例 3:

输入:a = 0, b = 1

输出:0

示例 4:

输入:a = 1, b = 1

输出:1

提示:

-2^31 <= a, b <= 2^31 - 1

b != 0

先展示一下我的代码结果

下面是详细的代码

class Solution {
public:int divide(int a, int b) {if (a == 0 || b == 1) return a;if (b == -1 && a == INT_MIN) return INT_MAX;int sign = (a > 0 ^ b > 0) ? -1 : 1;long la = abs((long)a);long lb = abs((long)b);long res = 0;while (la >= lb) {long temp = lb;long muti = 1;while (la >= temp << 1) {temp <<= 1;muti <<= 1;}la -= temp;res += muti;}return sign == 1 ? res : -res;};
};

以下是此代码增加注释后的版本:

class Solution {
public:// 函数实现除法功能,支持负数int divide (int a, int b) {// 如果除数是0或者被除数是1,返回被除数if (a == 0 || b == 1) return a;// 如果除数是-1且被除数是INT_MIN,返回INT_MAXif (b == -1 && a == INT_MIN) return INT_MAX;// 判断返回值正负号int sign = (a > 0 ^ b > 0) ? -1 : 1;// 将被除数和除数转为正数long la = abs((long)a);long lb = abs((long)b);// 返回值long res = 0;// 采用减法的方式实现除法while (la >= lb) {// 记录除数大小long temp = lb;// 乘数初始值long muti = 1; // 判断被除数是否大于除数*2while (la >= temp << 1) {// 将除数扩大一倍temp <<= 1;// 将乘数扩大一倍muti <<= 1; }// 被除数减去除数*乘数la -= temp;// 将乘数加入返回值中res += muti;       }// 根据正负号决定返回值return sign == 1 ? res : -res;}
};

程序的步骤如下:

1. 如果除数是0或者被除数是1,返回被除数。
2. 如果除数是-1且被除数是INT_MIN,返回INT_MAX。
3. 判断返回值正负号。
4. 将被除数和除数转为正数。
5. 采用减法来实现除法,即每次将除数乘以一定系数,然后减去该值,直到被除数小于除数为止,每次减去的除数对应的乘数加入返回值中。
6. 根据正负号决定返回值。

5.应该是最让人迷糊的,我们来仔细讲解一下5

第5步的目的是模仿除法的运算,减去被除数和乘数的乘积,直到被除数小于除数为止。它首先比较被除数和除数,如果被除数比除数大,就把除数扩大一倍,并把乘数扩大一倍,一直循环,直到被除数小于除数。然后,减去除数和乘数的乘积,并把乘数加入到返回值中,最后根据被除数和除数的正负性来决定返回值的flag。

以被除数为7,除数为3为例来说明减法模拟除法:首先,比较7和3,因为7>3,所以我们将除数变为6,也就是说此时的除数乘以2,乘数也需要乘以2;然后,看被除数和新的除数,发现7<6,所以我们就减去除数乘以乘数,即减去3*2,结果就是7÷3=2。

C++:剑指Offer精讲1.整数除法相关推荐

  1. 【LeetCode】剑指 Offer 16. 数值的整数次方

    [LeetCode]剑指 Offer 16. 数值的整数次方 文章目录 [LeetCode]剑指 Offer 16. 数值的整数次方 package offer;public class Soluti ...

  2. 剑指Offer #12 数值的整数次方(快速幂)

    题目来源:牛客网-剑指Offer专题 题目地址:数值的整数次方 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和 ...

  3. 【附可运行代码】剑指 Offer 16. 数值的整数次方

    立志用最少的代码做最高效的表达 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn).不得使用库函数,同时不需要考虑大数问题. 示例 1: 输入:x = 2.00000, n = 10 ...

  4. 剑指Offer Ⅱ 001. 整数除法(力扣剑指Offer专项突击版——整数_1)

    题目 给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'.除号 '/' 以及求余符号 '%' . 注意: 整数除法的结果应当截去(truncate)其小数部分,例如:tr ...

  5. 剑指Offer Ⅱ 003.二进制加法(力扣剑指Offer专项突击版——整数_3)

    题目 给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组. 示例 1: 输入: n = 2 输出: [0,1,1] 解释: 0 --> 0 1 ...

  6. 《剑指offer》数值的整数次方

    题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 分析:熟悉java中Math的话,直接调用即可,深刻说明在常规编程中熟悉java核 ...

  7. 《剑指Offer》 数值的整数次方

    题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 直接调用pow函数 代码: class Solution { pub ...

  8. 剑指Offer字符串转换成整数

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  9. [剑指Offer]:数值的整数次方(循环解答,快速幂---递归、循环)

    文章目录 题目描述 解答思路 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 示例: ...

最新文章

  1. java 日期的加减_用java实现日期类的加减
  2. 4_InfluxDB学习之InfluxDB的基本概念、InfluxDB中独有的概念(Point,series),InfluxDB学习之InfluxDB的基本操作,InfluxDB操作方式,crud
  3. 深入理解this和call、bind、apply对this的影响及用法
  4. columnproperty server sql_获取SQL Server表字段的各种属性
  5. 系统盘点Android开发者必须掌握的知识点,含小米、腾讯、阿里
  6. 数据科学入门与实战:玩转pandas之二
  7. 软件架构(5)---软件架构设计的一些总结和理解
  8. AGG第十八课 agg::trans_affine仿射变换
  9. Mysql之各种各样的函数啦
  10. VScode 配置 Java 环境
  11. linux中bzero函数,库函数
  12. andorid studio 无法识别app项目解决
  13. 测试脚本常用知识点python
  14. 太阳光轨迹软件_巧用虚拟天文馆软件Stellarium演示太阳周日视运动轨迹_贺志康...
  15. Win10网卡驱动突然消失
  16. 二维码定位算法流程图
  17. 数字化转型:信息系统的生命周期(一)
  18. 【关于Spring那些事】——与君初相识
  19. 李峋的爱心表白代码来了
  20. MySQL入门 - 数据分组之 group by

热门文章

  1. style常见的样式属性
  2. 动态图解实例 ConstraintLayout Chain
  3. java计算机毕业设计计算机课程在线培训学习管理系统MyBatis+系统+LW文档+源码+调试部署
  4. 电子竞技——靠智力取胜的体育项目
  5. PMP考试科目有什么?
  6. 46000\46001\46002\MNC\MCC\IMSI
  7. mysql存储过程 根据查询的结果集向表中插入数据
  8. Dr. Agrawal(Dharma P. Agrawal)
  9. L1-084 拯救外星人 C语言
  10. vscode必备常用插件