代码实现:
思路:用减法模拟除法
// 用减法模拟除法 int func(int a, int b) { // a、b均为负数 int ans = 0; while (a <= b) { // a的绝对值大于等于b,表示此时a够减 int t = b; int count = 1; // 用来计数被减的次数 // t >= INT_MIN / 2:防止减数越界,并且保证a的绝对值比两倍减数的绝对值大 while (t >= INT_MIN / 2 && a <= t + t) { count += count; t += t; } ans += count; a -= t; } return ans; } int divide(int a, int b) { // 特殊情况,特殊处理 if (a == INT_MIN && b == -1 || b == 0) { return INT_MAX; } if (a == INT_MIN && b == 1) { return INT_MIN; } // 标志位,储存运算结果的正负 bool flag = true; // 将a、b统一转换为负数进行处理 if (a > 0) { flag = !flag; a = -a; } if (b > 0) { flag = !flag; b = -b; } // 用减法模拟除法 int ans = func(a, b); // 根据标志位判定结果的正负 return flag ? ans : -ans; }