标签:
感觉这题挺容易的,就没自己做了············
直接用除数去一个一个加,直到被除数被超过的话,会超时。
解决办法每次将被除数增加1倍,同时将count也增加一倍,如果超过了被除数,那么用被除数减去当前和再继续本操作。
class Solution { public: int divide(int dividend, int divisor) { if (dividend == INT_MIN && divisor == -1) return INT_MAX; if (dividend == 0 || divisor == 0) return 0; int nega = 0; if ((dividend>0&&divisor<0) || (dividend<0&&divisor>0)) nega = 1; long long d=dividend;//int数据abs(-2147483648)会溢出,因为正数int只能到2147483647,所以需要long long 来存储一下 long long s=divisor; long long den = abs(d); long long sor = abs(s); if (sor > den) return 0; long long sum = 0; int count = 0; int res = 0; while (den >= sor) { count = 1; //a >= b保证了最少有一个count sum = sor; while (sum + sum <= den){ //!! sum += sum; count += count; } den -= sum; res += count; } if (nega) res = 0 - res; return res; } };
标签:
原文地址:http://www.cnblogs.com/qiaozhoulin/p/4569445.html