【Leetcode】之Divide Two Integers

来源:互联网 发布:java分销微商城源码 编辑:程序博客网 时间:2024/06/03 10:18

一.问题描述

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

二.我的解题思路

题目要求不用乘法,除法,取Mod运算来求解两个整数的除法,意味着只可以用加减法以及移位运算符。为了提高时间效率,很自然的想到采用移位运算符来使除法尽快接近被除数。最后测试通过的程序如下:

class Solution {public:    int divide(int dividend, int divisor) {        if (divisor == 0 || (dividend == INT_MIN && divisor == -1)) return INT_MAX;        if (divisor == 1) return dividend;        bool flag = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0);        long dividend_abs = abs((long)dividend);        long divisor_abs = abs((long)divisor);        int result = 0;        while (dividend_abs >= divisor_abs) {            for (int i = 0; dividend_abs >= divisor_abs * (1 << i); i++) {                dividend_abs -= divisor_abs * (1 << i);                result += (1 << i);            }        }        return flag ? 0 - result : result;    }};

对于无符号整数,有符号整数的溢出问题:
对于有符号整数而言,假设INT_MAX为2147483647,那么INT_MIN为-2147483648.有符号整数的溢出并没有标准的定义,常见的是正整数溢出变成了负数。

对于无符号整数而言,在区间[0,max]之间变动,溢出则会将去做变为范围另一端的取值,这是在C++中有标准定义的。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 邮箱登录锁死怎么办 标志408油耗高怎么办 gucci白鞋掉皮怎么办 深圳摇不到车牌怎么办 车辆换牌照需要怎么办 商标申请有异议怎么办 唯品会账号被冻结怎么办 易直播回放收费怎么办 手机屏幕被摔了怎么办 xp调分辨率黑屏怎么办 公司logo被盗用怎么办 商标注册证掉了怎么办 商标注册证书丢了怎么办 市场监督管理局罚款怎么办 东莞居住证掉了怎么办 工商注销了税务怎么办 楼道自来水爆了怎么办 工商证没年检怎么办 工行信用卡被锁怎么办 外地卡密码锁了怎么办 营业执照年审过期了怎么办 工商营业执照吊销了怎么办 小规模企业工商年检怎么办 血流变检查偏高怎么办 信誉卡没有邮箱怎么办 税务年报没报怎么办 工商忘记年审了怎么办 营业执照脱审了怎么办 公司年审没有弄怎么办 车检标志丢了怎么办 机动车年检丢了怎么办 汽车保险标志丢了怎么办 车辆年检贴丢失怎么办 车检标贴丢了怎么办 检验标贴丢了怎么办 小车换年检标志怎么办 职称证忘记审验怎么办 联合年报没报怎么办 职称年审过期了怎么办 嘉兴驾模预约怎么办 电大考试去不了怎么办