直接用除數去一個一個加,直到被除數被超過的話,會超時。
解決辦法每次將被除數增加1倍,同時將count也增加一倍,如果超過了被除數,那么用被除數減去當前和再繼續本操作。
#include <iostream> #include <vector> #include <string> using namespace std; class Solution { public: int divide(int dividend, int divisor) { // Start typing your C/C++ solution below // DO NOT write int main() function if (dividend == 0 || divisor == 0) return 0; int nega = 0; if ((dividend>0&&divisor<0) || (dividend<0&&divisor>0)) nega = 1; long long c = dividend; //先用兩個long long來存一下,不然下面abs(-2147483648)會溢出,因為正數int只能到2147483647 long long d = divisor; long long a = abs(c); long long b = abs(d); if (b > a) return 0; long long sum = 0; int count = 0; int final = 0; while (a >= b) { count = 1; //a >= b保證了最少有一個count sum = b; while (sum + sum <= a){ //!! sum += sum; count += count; } a -= sum; final += count; } if (nega) final = 0 - final; return final; } }; int main() { int dividend = 2147483647; int divisor = 2; Solution s; cout<<s.divide(dividend, divisor)<<endl; return 0; }
EOF
