fork download
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. int divide(int dividend, int divisor) {
  5. if (dividend == INT_MIN && divisor == -1) return INT_MAX; // 溢出處理
  6. // if (divisor == dividend) return 1;
  7. int neg = (dividend ^ divisor) < 0;
  8. //printf("%d ", neg);
  9.  
  10. unsigned int n = (dividend == INT_MIN) ? (unsigned int)INT_MAX + 1 : (dividend < 0) ? -dividend : dividend;
  11. unsigned int d = (divisor == INT_MIN) ? (unsigned int)INT_MAX + 1 : (divisor < 0) ? -divisor : divisor;
  12. int i = 0;
  13. unsigned int quotient = 0;
  14. while (i < 32 && n >= (d << i)) {
  15. printf("%u %u %d\n", n, d << i, i);
  16. ++i;
  17. }
  18. i--;
  19.  
  20.  
  21. while (i >= 0) {
  22. if (n >= (d << i)) {
  23. quotient += (unsigned int)1 << i;
  24. n -= d << i;
  25. }
  26. --i;
  27. }
  28. if (quotient > INT_MAX && neg == 0) return INT_MAX;
  29. //if (quotient > INT_MAX && neg == 1) return INT_MIN;
  30. //printf("%d ", quotient);
  31. if (neg) return -quotient;
  32. else return quotient;
  33. }
  34.  
  35. int main(void) {
  36. // your code goes here
  37. int a = divide(-2147483648, 2);
  38. //printf("%d ", a);
  39. return 0;
  40. }
  41.  
Success #stdin #stdout 0.01s 5280KB
stdin
Standard input is empty
stdout
2147483648 2 0
2147483648 4 1
2147483648 8 2
2147483648 16 3
2147483648 32 4
2147483648 64 5
2147483648 128 6
2147483648 256 7
2147483648 512 8
2147483648 1024 9
2147483648 2048 10
2147483648 4096 11
2147483648 8192 12
2147483648 16384 13
2147483648 32768 14
2147483648 65536 15
2147483648 131072 16
2147483648 262144 17
2147483648 524288 18
2147483648 1048576 19
2147483648 2097152 20
2147483648 4194304 21
2147483648 8388608 22
2147483648 16777216 23
2147483648 33554432 24
2147483648 67108864 25
2147483648 134217728 26
2147483648 268435456 27
2147483648 536870912 28
2147483648 1073741824 29
2147483648 2147483648 30
2147483648 0 31