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;
        }
    
  • 相关阅读:
    串的模式匹配
    Linux_ch02
    Linux操作简介
    Stack&Queue
    单链表
    工作中用到的oracle字符串分割整理
    maven_spring mvc_mina_dome(实体,文件,批传)(spring mina 初学dome)
    求整数和与均值
    简单计算器
    苹果和虫子2
  • 原文地址:https://www.cnblogs.com/wangha/p/11520896.html
Copyright © 2011-2022 走看看