说自己行就行

4.Algorithm1)对dividend和divisor均取绝对值,,一方便进行正整数相减的工作;

2)首先对第3步考虑到的特殊情形,进行特殊处理;

3)对普通模式进行处理时需要注意的两点是:

a)minus + minus有可能溢出,需要进行判定。如果minus + minus < 0,则溢出。需要进行第二次外层while循环,对factor和minus重新初始化;

b)当dividend – minus < 0时,需要进行第二次外层while循环,对factor和minus重新初始化;

5.Coding

#include<iostream>#include<cmath> // import abs#include<limits.h>using namespace std;class Solution{public:int divide(int dividend, int divisor){int MAX_INT = INT_MAX;// 如果除数为0,那么就输出MAX_INTif(divisor == 0)return MAX_INT;// 如果除数为1,那么就输出dividendif(divisor == 1)return dividend;// 如果除数为-1,那么就输出-dividendif(divisor == -1){if(dividend == INT_MIN)return MAX_INT;return 0 – dividend;}// 求取除数和被除数中负数的个数int minus = 0;if(dividend < 0)minus += 1;if(divisor < 0)minus += 1;dividend = abs(dividend);divisor = abs(divisor);int res = 0;// 处理INT_MIN的除法(divisor=INT_MIN),因为abs(INT_MIN)=INT_MINif(divisor == INT_MIN){if(dividend == INT_MIN)return 1;elsereturn 0;}bool flag_min = false;if(dividend == INT_MIN){flag_min = true;dividend = INT_MAX;}// 如果被除数小于除数,则输出0if(dividend < divisor)return 0;// 如果被除数不小于除数,则做减法操作while(dividend >= divisor){int factor = 1;res += factor;int minus_current = divisor;dividend -= minus_current;if(flag_min){flag_min = false;dividend += 1;}while(true){int minus_temp = minus_current;minus_current += minus_current;if(minus_temp >= 0 && minus_current < 0)break;int temp = dividend – minus_current;if(temp < 0)break;else{dividend = dividend – minus_current;if(flag_min){flag_min = false;dividend += 1;}res = res + factor + factor;factor = factor + factor;}};}// 如果商应该是负数,那么就对结果取相反数bool flag = minus & 1;if(flag)res = 0 – res;return res;}};int main(){int a = INT_MIN;int b = a + 1;int res = 0;Solution sol;res = sol.divide(a, b);cout<<res<<endl;return 0;}

可以以心感悟,以此沉淀,足矣;耳听佳音,目极美好,

说自己行就行

相关文章:

你感兴趣的文章:

标签云: