题目: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. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之44---QChat 技术...
  2. html5自适应团购,基于HTML5的O2O团购平台的设计与实现
  3. 邮件发送打印机更改打印机连接的通知
  4. HighNewTech—2019CES:历史性!百度用自家的自动驾驶物流,把一个快递送到了 2019CES会场
  5. css京东购物车静态页面实现
  6. 870C. Maximum splitting
  7. 一个看似是系统问题的应用问题的解决过程
  8. DataGridView的单元格内容即时更新方法
  9. win7 系统增加自定义分辨率_完美适配win7操作系统的平板电脑,专治软件不兼容...
  10. (转)Awk使用案例总结(运维必会)
  11. HDU1236 排名【排序】
  12. BIGWORLD问题集
  13. 电商宝:做最懂电商卖家的财务管理“小秘书”
  14. centos8安装和使用fmmpeg
  15. 简单题我重拳出击,困难题我唯唯诺诺
  16. Java毕设项目菜鸟驿站快递分发系统计算机(附源码+系统+数据库+LW)
  17. html分列代码,C#/VB.NET Excel数据分列(示例代码)
  18. 单片机胡汉才第四版答案_单片机课后习题答案__胡汉才编
  19. android usb wifi驱动下载,android 平台USB wifi驱动移植及使用
  20. Python时间序列LSTM预测系列教程(6)-单变量

热门文章

  1. 设计模式六大原则之--依赖倒置原则(DIP)
  2. python jupyter notebook怎么调字体大小_配置Jupyter的代码主题 字体以及字体大小 代码自动补全...
  3. nacos服务注册不上
  4. iOS-发布按钮动画(类似于闲鱼发布),弹出动画github开源
  5. 新媒体环境下“沉默的双螺旋”
  6. python爬虫之爬取捞月狗直播信息
  7. B站首页(推荐页)分析
  8. ps图层锁定后如何解锁
  9. Golang 数组的一些自问自答
  10. Oracle存储过程