The principle is very simple, cannot use multiplication to take the mold, generally always uses the bitwise operation, moves left or right moves. Shift left once is the equivalent of multiplying by 2. Until the multiplication is larger than the divisor, subtract the previous number with dividend and record the number of times multiplied by 2. This is then iterated over the resulting difference. Until the difference is less than the divisor. In addition, the labs function is an extension of ABS, note the usage.
classSolution { Public: intDivideintDividend,intdivisor) { if(!divisor | | (Dividend = = Int_min && divisor = =-1)) returnInt_max; intSign = ((Dividend <0) ^ (Divisor <0)) ? -1:1; Long LongDVD =Labs (dividend); Long LongDVS =Labs (divisor); intres =0; while(dvd>=DVS) { Long LongTemp=dvs,cnt=1; while(Dvd>= (temp<<1) ) {temp=temp<<1; CNT=cnt<<1; } DVD-=temp; Res+=CNT; } returnSign = =1? Res:-Res; }};
View Code
LC29 Divide, integers