当前位置:   article > 正文

C语言 | Leetcode C语言题解之第29题两数相除_leetcode两数相除c语言

leetcode两数相除c语言

题目:

题解:

  1. int divide(int dividend, int divisor){
  2. int cnt = 0;
  3. int sign = 1;
  4. if ((dividend ^ divisor) < 0) { // 两数任意一个为负数
  5. sign = -1;
  6. }
  7. if (divisor == INT_MIN) { // 除数边界值特殊处理
  8. if (dividend == INT_MIN) {
  9. return 1;
  10. } else {
  11. return 0;
  12. }
  13. }
  14. if (dividend == INT_MIN) { // 被除数边界值特殊处理
  15. if (divisor == -1) {
  16. return INT_MAX;
  17. } else if (divisor == 1) {
  18. return INT_MIN;
  19. }
  20. dividend += abs(divisor); // 先执行一次加操作,避免abs转换溢出
  21. cnt++;
  22. }
  23. int a = abs(dividend);
  24. int b = abs(divisor);
  25. while (a >= b) {
  26. int c = 1;
  27. int s = b;
  28. // 需指数级快速逼近,以避免执行超时
  29. while (s < (a >> 1)) { // 逼近至一半,同时避免溢出
  30. s += s;
  31. c += c;
  32. }
  33. cnt += c;
  34. a -= s;
  35. }
  36. return (sign == -1) ? -cnt : cnt;
  37. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/980408
推荐阅读
相关标签
  

闽ICP备14008679号