【Leetcode长征系列】 Divide Two Integers
来源:互联网 发布:什么是网络空间安全 编辑:程序博客网 时间:2024/04/28 14:58
原题:
Divide two integers without using multiplication, division and mod operator.
思路: 记录除数与被除数的符号判断结果的符号。处理除数与被除数的绝对值。我的处理方式是,除数减去被除数!直到减为负数。
代码:
class Solution {public: int divide(int dividend, int divisor) { if(divisor==0) return -1; if(divisor == 1) return dividend; int res; bool sig = false; //false means it is below 0; if((dividend <0 && divisor <0) && (dividend>0 && divisor>0)) sig = true; if(abs(dividend) < abs(divisor)) return 0; else { for (int i=abs(dividend), res=0; i>0; i = i-abs(divisor)) res++; } if(!sig) res = -res; return res; }};
超时,很明显当两者的差别很大时,一点一点减少太浪费时间。
重想。
方法2: 用二分法。先让divisor*2,直到它的值大于dividend,此时用dividend减去这个值,剩下的值继续做之前那种运算,直到剩余值小于divisor。答案便是2的幂值之和。
class Solution {public: int divide(int dividend, int divisor) { if(divisor==0) return -1; if(divisor == 1) return dividend; int res = 0; int count; bool sig = false; //false means it is below 0; long int end = abs(dividend); long int sor = abs(divisor); if((dividend <0 && divisor <0) && (dividend>0 && divisor>0)) sig = true; if(abs(dividend) < abs(divisor)) return 0; else { while(true){ while(true){ count++; if(pow(count,2)*sor>end) break; } res += count-1; end -= pow(count-1,2)*sor; count = 0; if(end < sor) break; } } if(!sig) res = -res; return res; }};
依旧超时…
=================================================================================================================================
这里有一个问题!和实验室学长们讨论后重温到一些以前觉得无所谓的知识:
c++中,int的值为[-2^31, 2^31-1], 所以每次当我取abs值时,会造成溢出,从而进入死循环。
所以这道题,我们需要把int改为 long long的64位值。
0 0
- 【Leetcode长征系列】 Divide Two Integers
- [leetcode刷题系列]Divide Two Integers
- leetcode系列(46)Divide Two Integers
- LeetCode: Divide Two Integers
- [LeetCode]Divide Two Integers
- LeetCode: Divide Two Integers
- [LeetCode] Divide Two Integers
- [Leetcode] Divide Two Integers
- LeetCode Divide Two Integers
- 【leetcode】Divide Two Integers
- [LeetCode]Divide Two Integers
- LeetCode-Divide Two Integers
- LeetCode: Divide Two Integers
- Divide Two Integers - leetcode
- Leetcode: Divide Two Integers
- LeetCode:Divide Two Integers
- leetcode Divide Two Integers
- LeetCode Divide Two Integers
- 快速排序算法
- linux之grep命令
- 产品经理需会用的软件
- 对TCP/IP网络协议的深入浅出归纳
- 约瑟夫环问题
- 【Leetcode长征系列】 Divide Two Integers
- Cookie/Session机制详解
- Linux下Fork与Exec使用
- CodeForces 447-A. DZY Loves Hash
- OpenGL ES之Android 3D系列基本概念
- git和SVN的区别
- 在iOS中创建静态库
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- SQLServer时间日期函数详解