本文主要是介绍LeetCode第29题之Divide Two Integers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于LeetCode第29题之Divide Two Integers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!