算法:两数相除
?
class Solution { public:int divide(int dividend, int divisor) {if(dividend == 0) return 0;if(divisor == 1) return dividend;if(divisor == -1){if(dividend>INT_MIN) return -dividend;// 只要不是最小的那個整數(shù),都是直接返回相反數(shù)就好啦return INT_MAX;// 是最小的那個,那就返回最大的整數(shù)啦}long a = dividend;long b = divisor;int sign = 1; if((a>0&&b<0) || (a<0&&b>0)){sign = -1;}a = a>0?a:-a;b = b>0?b:-b;long res = div(a,b);if(sign>0)return res>INT_MAX?INT_MAX:res;return -res;}int div(long a, long b){ // 似乎精髓和難點就在于下面這幾句if(a<b) return 0;long count = 1;long tb = b; // 在后面的代碼中不更新bwhile((tb+tb)<=a){count = count + count; // 最小解翻倍tb = tb+tb; // 當前測試的值也翻倍}return count + div(a-tb,b);} };?
總結(jié)