美文网首页
每周一道算法题(二十四)

每周一道算法题(二十四)

作者: CrazySteven | 来源:发表于2017-08-27 23:56 被阅读489次

本周的题目难度级别'Medium'

题目:本周的题目又是一道造轮子的题,就是不用‘*’和‘/’来实现除法。

思路:a/b = c,c可以写成二进制,即20+21+...+2^n,根据这个公式,来实现此题,下面看看代码:

int divide(int dividend, int divisor) {
    if (dividend == 0) return 0;
    //i和j是用来实现循环的,flag是判断正负符号
    int i=0,j,flag=0;
    //result是商,a,b是新的除数和被除数,map和times作为2进制存储的容器,容器33是因为int类型总长度是2^32,0〜32是33个数
    long long result=0,a,b,map[33],times[33];
    //判断正负
    if((dividend>0 && divisor>0) || (dividend<0 && divisor<0))flag=1;
    //转为正整数
    a=(long long)dividend > 0?(long long)dividend:-(long long)dividend;
    //转为正整数
    b=(long long)divisor>0 ?(long long)divisor:-(long long)divisor;
    //map从b开始,times从2^0开始
    map[0]=b;times[0]=1;
    //先展开
    while(map[i] <= a && i<33){
        i++;
        map[i]=map[i-1]+map[i-1];
        times[i]=times[i-1]+times[i-1];
    }
    //统计结果
    for(j=i-1;j>=0;j--){
        while(a >= map[j]){
            a-=map[j];
            result+=times[j];
        }
    }
    //加上符号
    result=flag?result:-result;
    //判断是否越界
    if(result<INT_MIN || result > INT_MAX)return INT_MAX;
    return (int)result;
}

以上代码效率一般,也有别的思路,比如位操作、迭代等方法效率更好,有兴趣的小伙伴可以自己学习,另外,我们也能看出实现除法也并不是很容易(毕竟难度级别Medium),我记得上学的时候老师也说过能写乘法就别也除法,我也在我的代码中能口算的除法直接写成乘法了,比如除以2就写成乘以0.5。。。Y(^_^)Y(用Markdown打表情还需要技巧)

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

相关文章

  • ARTS第三周(2018-12-16)

    1.Algorithm:每周至少做一个 leetcode 的算法题 第一道算法题:https://leetcode...

  • ARTS(09)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(05)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(07)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(10)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(02)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(03)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(08)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(06)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

  • ARTS(04)

    什么是 ARTS? 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习 ...

网友评论

      本文标题:每周一道算法题(二十四)

      本文链接:https://www.haomeiwen.com/subject/caxwdxtx.html