int32_t floor_divide(int32_t a, int32_t b) { if (b < 0 && a < 0) { return -a / -b; } else if (a >= 0 && b >= 0) { return a / b; } else if (a < 0) { return (-((-(a) - 1) / (b))) - 1; } else if (a != 0) { return (-(((a) - 1) / -(b))) - 1; } return 0; }