[leetcode题后感]Divide Two Integers

最开始时候开到这个题 不让用除法乘法和模运算 想到的就只剩下了位运算

位运算也就是左移乘2 右移除2 乘二除二 顺理成章的想到了二分查找

两个int的除法返回int 要摒弃传统除法的计算想法 

a*b=c 转换为加法也就是b个a相加等于c 而整数除法中 b=c/a 则应该是b个a相加小于c 但是b+1个a相加大于c

由这个思路去找符合条件的b

首先想到的就是依次+1枚举 但是这样的做法就是超时

结果位运算我们可以每次加2的n次幂 当加多了的时候返回上一次加的结果 再次从2的零次幂开始加 直到找到符合条件的b 类似tcp拥塞控制的想法

以上就是这个题的思路

但是 这个题目一定要注意边界的溢出处理 

int型变量很容易发生溢出 导致各种死循环的错误

因为为了防止溢出讲输入参数用一个长整形去代替

此处请注意 long long、long、和int类型的区别

long long 长度为8字节

long的长度则根据你的机器和编译器的不同而不同 比如我的机器是64位机器 但是编译器是32位的 那么sizeof(long)的返回值是4 若是64位的编译器应该返回8 经测试 leetcode的编译器应该是32位的 此处也导致了我卡住了几天找不到问题所在……

int的长度一般为4字节没得说 int的最值可以不用写2147483647 和-2147483648 可以写成INT_MAX和INT_MIN 他们在头文件<limits.h>中 当然宏定义展开后就是这两个数值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值