LeetCode第29题之Divide Two Integers

来源:互联网 发布:数据新闻比赛官网 编辑:程序博客网 时间:2024/05/20 19:15

C++代码:

#include <iostream>#include <limits>using namespace std;class Solution {public:    int divide(int dividend, int divisor) {        /*1. 将int转换成long long int可以省事,例如当被除数与             但long long int可以*/        /*2. -2147483648为最小的int,而最大的int为2147483647,             故需要先强制类型转换为double*/        long long int a = abs((double)dividend);        long long int b = abs((double)divisor);        long long int ret = 0;        long long int c;        while(a>=b)        {        /* 3. 注意这里c要申明为long long int,否则有可能移位之后              变为0,从而形成死循环*/            c = b;              for (int i=0;a>=c;++i,c<<=1)            {                a -= c;                ret += 1<<i;            }        }        //将dividend和divisor抑或运算,最高位即表示为结果的符号位        ret = ( (dividend^divisor) >> 31 )? (-ret) : ret;        return ( (ret > INT_MAX || ret < INT_MIN)? INT_MAX : ret );    }};int main(){    Solution s;    int a = -2147483648;    int b = -1;    cout<<s.divide(a, b)<<endl;    return 0;}
0 0
原创粉丝点击