请选择 进入手机版 | 继续访问电脑版

【算法题解】29. 辗转相除 - Java

[复制链接]
丶禁飞 发表于 2021-1-1 17:47:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
题目形貌

  1. 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的效果应当截去(truncate)其小数部门,比方:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例 1:输入: dividend = 10, divisor = 3输出: 3表明: 10/3 = truncate(3.33333..) = truncate(3) = 3示例 2:输入: dividend = 7, divisor = -3输出: -2表明: 7/-3 = truncate(-2.33333..) = -2
复制代码
理论知识

异或运算的妙用
Java代码

[code]    public int divide(int dividend, int divisor) {        // 被除数== 最小值 或  除数为-1 直接返回        if (dividend == Integer.MIN_VALUE && divisor == -1)             return Integer.MAX_VALUE;         int result = 0;        // 判断同号还是异号,用于返回效果.同号为        // boolean k = (dividend ^ divisor) > 0;        boolean k = (dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0);        // 转成负数计算,因为正数算的话大概会溢出,负数则不会        dividend = - Math.abs (dividend); // - ((dividend ^ (dividend >> 31)) + (dividend >> 31))        divisor = - Math.abs(divisor); //- ((divisor ^ (divisor >> 31)) + (divisor >> 31));         // 循环相减        while (dividend
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )