divide-two-integers-V2.dart (1381B)
1 //Given two integer inputs return the value of them divided 2 //by each other. To do this you are supposed to not use * / or %. 3 //Given this first I used recursion but it was too slow so I then 4 //went iterative with my current solution. 5 //Time: 2194ms 6 //Beats: 6.6% 7 class Solution { 8 int divide(int dividend, int divisor) { 9 if(divisor == 1){ 10 if(dividend > pow(2,31) - 1){ 11 return (pow(2,31) - 1).toInt(); 12 } 13 if(dividend < pow(-2,31)){ 14 return pow(-2,31).toInt(); 15 } 16 return dividend; 17 } 18 if(divisor == -1){ 19 if(-dividend < pow(-2,31)){ 20 return pow(-2,31).toInt(); 21 } 22 if(-dividend > pow(2,31) - 1){ 23 return (pow(2,31) - 1).toInt(); 24 } 25 return -dividend; 26 } 27 bool negative = false; 28 if(dividend < 0){ 29 dividend = dividend.abs(); 30 negative = !negative; 31 } 32 if(divisor < 0){ 33 divisor = divisor.abs(); 34 negative = !negative; 35 } 36 int ret_val = 0; 37 while(dividend >= divisor + divisor + divisor){ 38 dividend -= divisor + divisor + divisor; 39 ret_val += 3; 40 } 41 while(dividend >= divisor){ 42 dividend -= divisor; 43 ret_val += 1; 44 } 45 if(-ret_val < pow(-2,31)){ 46 return pow(-2,31).toInt(); 47 } 48 if(ret_val > pow(2,31) - 1){ 49 return (pow(2,31) - 1).toInt(); 50 } 51 if(negative){ 52 return -ret_val; 53 } 54 return ret_val; 55 } 56 }