关闭

leetcode 29. Divide Two Integers

标签: C语言编程笔试leetcode
143人阅读 评论(0) 收藏 举报
分类:

          把四种正负情况都按负数除以负数来处理(因为最小的负数的绝对值比最大的正数的绝对值大1),然后不断把除数左移一位,其实就是乘以2,直到小于当前被除数,这时2的(移位次数-1)次方就是结果绝对值的一部分记为A,被除数-除数*A作为下一次循环的当前被除数,继续按同样的办法计算,直到当前被除数大于除数(因为是负数),把结果的每一部分加起来就是结果的绝对值,再根据原始的符号异同决定结果正负。另外还需要把一些边界问题考虑好。思路很差,代码很差,仅供参考,AC万岁。


int divide(int dividend, int divisor) {
    int num1=0;
    int res=0;
    int flag;
    int temp;
    int i;
    if(divisor==0)
        return 2147483647;
    if(dividend==0)
        return 0;


    if(dividend<0&&divisor<0)
        flag=1;
    else if(dividend>0&&divisor>0)
    {
        flag=1;
        dividend=-dividend;
        divisor=-divisor;
    }
    else if(dividend>0&&divisor<0)
    {
        flag=0;
        dividend=-dividend;

    }
    else if(dividend<0&&divisor>0)
    {
        flag=0;
        divisor=-divisor;
    }

    if(dividend>divisor)
        return 0;
    int currentDividend=dividend;
    num1=divisor;
    while(1)
    {
        i=0;
        num1=divisor;
        while(1)
        {
            num1=divisor<<i;
            if(currentDividend==-2147483648&&num1==-2147483648)
            {
                i++;
                break;
            }
            if(num1>=currentDividend&&num1<-1073741824)
            {
                i++;
                break;
            }
            if(num1<currentDividend)
            {
                break; 
            }
            i++;
          //  printf("num1=%d\n",num1);
        }
      //  scanf("%d",temp);
        res+=(1<<(i-1));
        currentDividend-=(divisor<<(i-1));
        if(currentDividend>divisor)
            break;
       // printf("currentDividend=%d\n",currentDividend);
    }

    if(flag==0)
        return -res;
    else if(res==-2147483648)
        return 2147483647;
    else
        return res;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12306次
    • 积分:584
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:0篇
    • 译文:2篇
    • 评论:2条
    文章分类
    最新评论