博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:Divide Two Integers
阅读量:4604 次
发布时间:2019-06-09

本文共 1220 字,大约阅读时间需要 4 分钟。

Divide two integers without using multiplication, division and mod operator.

其实刚开始看到这道题的时候,感觉应该是略简单。但真正开始写的时候发现了很多错误。

最开始的想法就是divisor一个一个加上去直到大于dividend为止,不过这样时间复杂度略高,是不会AC的。

后来的想法是每加一次,都把加数*2,这样可以较快得到收敛。得到的结果大于dividend的时候,把之前加的值减去,继续从divisor开始加。直到result和dividend的值相差小于divisor。

不过在过程中发现结点int边界的数值一直都在循环,跳不出来的原因是,我设置的类型都为int,有一些add或者result相加大于int的最大值后,得到的result和add都为负数了。这样循环改变就不会收敛了。

后来把所有的都改成long就对了。


public class Solution {

     public int divide(int dividend, int divisor) {
        if(divisor == 0) return divisor;
        //if(dividend<divisor) return 0;
        int syn = 1;
        if(dividend<0)
        {
            if(divisor>0)
            {
                syn = 0;
            }
        }
        if(divisor<0)
        {
            if(dividend>0)
            {
                syn = 0;
            }
        }
        //dividend = Math.abs(dividend);
        //divisor = Math.abs(divisor);
        long longDividend = Math.abs((long)dividend);
        long longDivisor = Math.abs((long)divisor);
        long i = 1;
        long result = 0;
        long add = divisor;
        long div = 0;
        while(longDividend-result>=longDivisor)
        {
            i = 1;
            add = longDivisor;
            while(result<longDividend)
            {
                result = result + add;
                div = div + i;
                i = i + i;
                add = add + add;
               
            }
            if(result == longDividend)
            {
                break;
            }
            else
            {
                result = result - add/2;
                div = div - i/2;
            }
        }
        if(syn == 0)
        {
            div = -div;
        }
        return (int)div;
       
    }
}

转载于:https://www.cnblogs.com/jessiading/p/3772634.html

你可能感兴趣的文章
数组相关函数
查看>>
Python 和其他编程语言数据类型的比较
查看>>
T2695 桶哥的问题——送桶 题解
查看>>
HTML5 表单
查看>>
Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧...
查看>>
关于微信公众平台测试号配置失败的问题
查看>>
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>
acwing 651. 逛画展
查看>>
(待完成)qbxt2019.05 总结12 - 趣味题目 鹰蛋
查看>>
[2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
查看>>
关于WPF程序只运行一个实例的方法
查看>>
图论:点分治
查看>>
mysql
查看>>
C/C++ 知识点---sizeof使用规则及陷阱分析(网摘)
查看>>
java小程序 示例
查看>>
前端开发在线小工具
查看>>