• LeetCode29 Divide Two Integers


    题目:

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

    If it is overflow, return MAX_INT. (Medium)

    分析:

    题目要求不使用乘除和模运算实现两个整数除法。

    第一个思路就是每次把count加等被除数自身判定,只到count<=除数,并且count + 被除数 > 除数时即为结果。

    但是考虑到可能有 MAX_INT / 1这种情况,肯定华丽超时。

    然后考虑使用移位运算,每次将count加等被除数左移一位(*2),满足条件后跳出循环,并且把除数 -= count,再来,只到除数 < 被除数挑出外循环。

    注意:

    这种数学题不是很好写(从AC率只有15%左右可以看出)。除了想清楚算法本身,

    还要注意正负数处理,注意int范围处理(一般改成long long最后再判定比较简便,比如reverse integer)

    代码:

     1 class Solution {
     2 public:
     3     int divide(int dividend, int divisor) {
     4         long long ldividend = dividend;
     5         long long ldivisor = divisor;
     6         int flag = 1;
     7         if (ldividend < 0) {
     8             ldividend = -ldividend;
     9             flag = -flag;
    10         }
    11         if (ldivisor < 0) {
    12             ldivisor = -ldivisor;
    13             flag = -flag;
    14         }
    15         long long result = 0;
    16         while (ldivisor <= ldividend) {
    17             long long count = ldivisor;
    18             long long temp = 1;
    19             long long tempDividend = ldividend;
    20             while ( !(count <= tempDividend && (count << 1) > tempDividend)) {
    21                 count <<= 1;
    22                 temp <<= 1;
    23             }
    24             result += temp;
    25             ldividend -= count;
    26         }
    27         if (flag < 0) {
    28             if (result > 0x80000000) {
    29                 return 0x7FFFFFFF;
    30             }
    31             else {
    32                 return -result;
    33             }
    34         }
    35         else {
    36             if (result > 0x7FFFFFFF) {
    37                 return 0x7FFFFFFF;
    38             }
    39             else {
    40                 return result;
    41             }
    42         }
    43         
    44     }
    45 };
  • 相关阅读:
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    Oracle分析函数-排序排列(rank、dense_rank、row_number、ntile)
  • 原文地址:https://www.cnblogs.com/wangxiaobao/p/5782147.html
Copyright © 2020-2023  润新知