当前位置:   article > 正文

C++ | Leetcode C++题解之第29题两数相除

C++ | Leetcode C++题解之第29题两数相除

题目:

题解:

  1. class Solution {
  2. public:
  3. int divide(int dividend, int divisor) {
  4. // 考虑被除数为最小值的情况
  5. if (dividend == INT_MIN) {
  6. if (divisor == 1) {
  7. return INT_MIN;
  8. }
  9. if (divisor == -1) {
  10. return INT_MAX;
  11. }
  12. }
  13. // 考虑除数为最小值的情况
  14. if (divisor == INT_MIN) {
  15. return dividend == INT_MIN ? 1 : 0;
  16. }
  17. // 考虑被除数为 0 的情况
  18. if (dividend == 0) {
  19. return 0;
  20. }
  21. // 一般情况,使用类二分查找
  22. // 将所有的正数取相反数,这样就只需要考虑一种情况
  23. bool rev = false;
  24. if (dividend > 0) {
  25. dividend = -dividend;
  26. rev = !rev;
  27. }
  28. if (divisor > 0) {
  29. divisor = -divisor;
  30. rev = !rev;
  31. }
  32. vector<int> candidates = {divisor};
  33. // 注意溢出
  34. while (candidates.back() >= dividend - candidates.back()) {
  35. candidates.push_back(candidates.back() + candidates.back());
  36. }
  37. int ans = 0;
  38. for (int i = candidates.size() - 1; i >= 0; --i) {
  39. if (candidates[i] >= dividend) {
  40. ans += (1 << i);
  41. dividend -= candidates[i];
  42. }
  43. }
  44. return rev ? -ans : ans;
  45. }
  46. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/687075
推荐阅读
相关标签
  

闽ICP备14008679号