Divide two integers without using multiplication, division and mod operator.
题的思路不难,但是没有注意数据的大小问题。之前一直用int做,一直不能通过。换成long long才通过。
class Solution { public: int divide(int dividend, int divisor) { int re = 0; int flag =0; long long end = dividend ,sor = divisor; if(dividend <0) { end = 0- end; flag ++; } if(divisor <0) { sor = 0- sor; flag++; } if(sor >end)return 0; map<double , int> ma; // value , times vector<double> a; long long temp = sor; a.push_back(sor); ma[temp] = 1; int i =1; while(temp < end) { temp = temp + temp; i = i+ i; a.push_back(temp); ma[temp] = i ; } long long left = end; int j = a.size()-1; while(left >= sor) { while(left - a[j] >=0) { left = left -a[j]; re += ma[a[j]]; } j--; if(j < 0)break; } if(flag == 1) return 0-re; return re; } };