【剑指offer专项】1.整数除法刷题总结

前提

刷题已经开始了,希望通过记笔记的方式来帮助自己理清思路,同时方便后续复习。同时也希望通过这种方式能帮助到一些同样在刷题的朋友。

知识点总结

主要使用的知识点:计算机的计算方式;补码反码;数据类型溢出问题;二进制左右移运算的运用(位运算);时间优化问题;

主要难点

  1. 为什么会越界?越界怎么处理
    计算机的减法是用补码进行运算的。具体参考下面补码的知识。对于int的32位,其数值范围为2^31-1—— -2^31 .当算法中出现了abs(-2^31) 就会有越界问题,因为C++中abs( -2^31 )= 2^31 越界了,一般计算机会让其等于-2^31。和我们认知不同。在写程序的时候就会出错。

    补码的知识

    以时钟为列 假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12).在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。若用一般公式可表示为:a-b=a-b+mod=a+mod-b。即任何有模的计量器,均可化减法为加法运算 。就是取反后加1。

  2. 为什么需要时间优化?
    当时间复杂度超过10^8时候,运行速度就会大大减低。这里对于int的最大数 2147483647每次减1需要循环2147483647>10^8次。所以采用移位的方式优化,并这种方法具有一般性,用代码容易提炼。如下所示。
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值