LeetCode29. 两数相除

题目

分析

 

 

代码

 1 class Solution
 2 {
 3 public:
 4     int divide(int x, int y)
 5     {
 6         typedef long long ll;
 7         vector<ll> exp;
 8         bool is_minus = false;
 9 
10         if ((x > 0 && y < 0 )|| (x < 0 && y > 0))
11             is_minus = true;
12 
13         ll a = abs((ll)x), b = abs((ll)y);
14         for (ll i = b; i <= a; i = i + i)
15             exp.push_back(i);
16         
17         ll res = 0;
18         for (int i = exp.size() - 1; i >= 0; i--)
19         {
20             if ( a >= exp[i])
21             {
22                 a -= exp[i];
23                 res += 1ll << i; //2的i次方 ,注意31次方移位会溢出所以转ll
24                 
25             }
26         }
27 
28         if (is_minus)
29             res = -res;
30 
31         if (res > INT_MAX || res < INT_MIN)
32             res = INT_MAX;
33         return res;
34     }
35 };

 

posted @ 2022-07-01 18:04  Uitachi  阅读(27)  评论(0编辑  收藏  举报