zoukankan      html  css  js  c++  java
  • C实现除法

    C实现除法

    来源

    Leetcode上的一个题,做完后感觉很有意义,因而记录。

    实际上自己也查阅了不少的实现除法的方式,最后还是感觉这个方法是最好的,没有别的原因,就是快。

    需要注意的一些点

    1. 正整数之间相互操作会显得更加方便些,因此,我们需要考虑一些边界问题。比如int的范围是[-2e31,2e31-1],因此,如果-2e31转化为正数时,就超出了int的范围,最好的解决方式就是转化为long long int。
    2. 当然也可以转化为long int,这个取决于你的OS所定义的Long的范围。
    3. 变成相反数的时候,选择0-x会更加方便。
    4. ^异或符的使用也能帮助加快处理速度。
    5. 每个变量的type都需要斟酌过,因为很有可能会超过范围。

    代码

        int divide(int dividend, int divisor){
            long long int y = (long long int)dividend;
            long long int x = (long long int)divisor;
            if(y < 0) y = 0 - y;
            if(x < 0) x = 0 - x;
            long long int tmp, one = 1, res = 0;
            int restmp;
            while(y >= x){
                restmp = 0;
                tmp = x;
                while(y >= tmp){
                    tmp = tmp << 1;
                    restmp ++;
                }
                restmp --;
                y -= (x << restmp);
                res += (one << restmp);
            }
            if((dividend > 0)^(divisor > 0))
                res = 0 - res;
            if(res > 2147483647 || res < -2147483648)
                res = 2147483647;
            return res;
        }
    
  • 相关阅读:
    Myeclipse 安装svn插件
    Http状态码详解
    myeclipse中的js文件报错
    eclipse 反编译插件安装
    ecshop绕过验证码暴力破解
    Myeclipse中全部文件设置成UTF-8
    WampServer phpadmin apache You don't have permission to access
    如何在Win8系统上建立WIFI热点
    记录远程桌面登录者的IP和MAC
    数据库总结
  • 原文地址:https://www.cnblogs.com/wangha/p/11520896.html
Copyright © 2011-2022 走看看