zoukankan      html  css  js  c++  java
  • leetcode29

    不使用乘法、除法、求余数,计算两个数字相除。

    使用加法和减法运算。

    Java实现代码如下:

     1 class Solution {
     2     public int divide(int dividend, int divisor) {
     3         if (dividend == Integer.MIN_VALUE && divisor == -1) {
     4             return Integer.MAX_VALUE;
     5         }
     6         long a = Math.abs((long)dividend);
     7         long b = Math.abs((long)divisor);
     8         int num = 0;
     9         long sum;
    10         while (b <= a) {
    11             sum = b;
    12             int count = 1;
    13             while (sum + sum <= a) {
    14                 count += count;
    15                 sum += sum;
    16             }
    17             a = a - sum;
    18             num = num + count;
    19         }
    20         if ((dividend < 0 && divisor > 0) || dividend > 0 && divisor < 0) {
    21             num = -num;
    22         }
    23         return num;
    24     }
    25 }

    上述代码用实际的例子进行解释,假设a=10,b=3,主要介绍10~19行的循环体的逻辑。

    外部循环1:判断 3 <= 10满足

      内部循环1.1:3 + 3 <= 10满足,count = 2,sum = 6

      内部循环1.2:6 + 6 <= 10不满足,跳出内部循环,a = 10 - (3 + 3) = 4,num = 0 + 2 = 2

    外部循环2:判断3 <= 4满足,

      内部循环2.1:3 + 3 <= 4不满足,跳出内部循环,a = 4 - 3 = 1,num = 2 + 1 = 3。

    最终num=3,即为所求。可分析,这里是计算在b的倍数,不超过a的情况下,最多是b的几倍。

    用连续的加法来计算乘法,用减法来计算求余。

  • 相关阅读:
    智能车回忆
    自动化面试问题
    先进控制理论(转载)
    电力电子技术(转载)
    微型计算机原理及应用复习(转载)
    c语言中数值交换用值传递和地址传递
    unity调用苹果端方法
    unity调用安卓arr方法
    unity mono单例
    loading通用界面笔记
  • 原文地址:https://www.cnblogs.com/asenyang/p/9826849.html
Copyright © 2011-2022 走看看