29. Divide Two Integers - LeetCode
发布日期:2021-08-15 09:33:48 浏览次数:15 分类:技术文章

本文共 1522 字,大约阅读时间需要 5 分钟。

Question

2018-07-06_202626.png

Solution

题目大意:给定两个数字,求出它们的商,要求不能使用乘法、除法以及求余操作。

思路:说下用移位实现的方法

7/3=2,7是被除数,3是除数除数左移,假设移动了n次后,移到最接近被除数,这时被除数=被除数-除数,商的一部分为2^n如果被除数>除数,则继续循环除数左移,又移动了m次后,移到最接近被除数,这时被除数=被除数-除数,商的一部分为2^m最后商为2^n+2^m+...

Java实现:

法1:如果可以用除法,一步就可以了

public int divide2(int dividend, int divisor) {        // overflows    if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;    // 给定两个数字,求出它们的商,要求不能使用乘法、除法以及求余操作。    return dividend / divisor;}

法2:下面是用减法实现的,执行超时

public int divide2(int dividend, int divisor) {    // overflows    if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;    int ans = 0;    boolean negative = !((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0));    dividend = Math.abs(dividend);    divisor = Math.abs(divisor);    dividend -= divisor;    while (dividend >= 0) {        ans++;        dividend -= divisor;    }    return negative ? -ans : ans;}

法3:用移位实现

public int divide(int dividend, int divisor) {    // 防止溢出    if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;    // 获取最终结果的符号    int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;    long dvd = Math.abs((long) dividend);    long dvs = Math.abs((long) divisor);    int ans = 0;    while (dvd >= dvs) {        long tmp = dvs, multiple = 1;        while (dvd >= (tmp << 1)) {            tmp <<= 1;            multiple <<= 1;        }        dvd -= tmp;        ans += multiple;    }    return sign == 1 ? ans : -ans;}

转载于:https://www.cnblogs.com/okokabcd/p/9275479.html

转载地址:https://blog.csdn.net/weixin_30757793/article/details/99575390 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:正则表达式规则(七)
下一篇:递归合并数组

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年03月21日 08时18分04秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

layui导入模板数据_layui表格-template模板的三种用法 2019-04-21
mysql分组显示行号_mysql 显示行号,以及分组排序 2019-04-21
MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构 2019-04-21
编写python程序、计算账户余额_小明有20w存款存在余额宝中,按余额宝年收益为3.35%计算,用Python编写程序计算,多少年后小明的存款达到30w?... 2019-04-21
python 公众号引流_公众号引流方法有哪些? 2019-04-21
java 减少内存_java中减少内存占用小技巧 2019-04-21
centos 7 mysql图形界面_centos7-vnstat图形界面搭建 2019-04-21
java 防渗透_「java、工程师工作经验怎么写」-看准网 2019-04-21
java中跳出当前循环怎么做_在java中,如何跳出当前的多重循环? 2019-04-21
java程序中执行maven_java – 将一个enviornment变量传递给Maven中的已执行进程 2019-04-21
java16下载_java lombok下载 2019-04-21
python 图像处理与识别书籍_Python图像处理之识别图像中的文字(实例讲解) 2019-04-21
java安全初始化_java安全编码指南之:声明和初始化 2019-04-21
java jstat gc_分析JVM GC及内存情况的方法 2019-04-21
php pclzip.lib.php,php使用pclzip类实现文件压缩的方法(附pclzip类下载地址) 2019-04-21
php dns更新,php_mzdns: 站群,大量域名 通过 dns 服务商 api 批量添加 ip 工具。你懂的~ 基于 mzphp2 框架。... 2019-04-21
jdk 1.8 java.policy,JDK1.8 导致系统报错:java.security.InvalidKeyException:illegal Key Size 2019-04-21
php linux权限,Linux权限详细介绍 2019-04-21
典型环节的matlab仿真分析,典型环节的MATLAB仿真.doc 2019-04-21
Php contenttype类型,各种类型文件的Content Type 2019-04-21