题目
给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。
整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。
返回被除数 dividend 除以除数 divisor 得到的 商 。
注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 [−231, 231 − 1] 。本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 -231 ,则返回 -231 。
示例 1:
输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = 3.33333.. ,向零截断后得到 3 。
示例 2:
输入: dividend = 7, divisor = -3 输出: -2 解释: 7/-3 = -2.33333.. ,向零截断后得到 -2 。
提示:
-231 <= dividend, divisor <= 231 - 1divisor != 0
思路
这道题我是将除法转化为减法,如:

将被除数分为 n 个除数。
这样要求我们先对结果的正负进行判断,然后对除数与被除数取绝对值进行减法。
为了加快速度,令 d= 除数 b ,将 d 每次与被除数 a/2 比较后乘以2,再进行比较,用 c 代表此时的d = c * b
代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int divide(int dividend, int divisor);
int main()
{
int a = 2147483647;
int b = 1;
int c = divide(a, b);
printf("%d", c);
}
int divide(int dividend, int divisor)
{
int res = 0;
int sign = 1;
if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0))
sign = -1;
if (divisor == INT_MIN)
{
if (dividend == INT_MIN)
return 1;
else
return 0;
}
if (dividend == INT_MIN)
{
if (divisor == 1)
return INT_MIN;
else if (divisor == -1)
return INT_MAX;
res++;
dividend = dividend + fabs(divisor);
}
int a = fabs(dividend);
int b = fabs(divisor);
while (a >= b)
{
int c = 1;
int d = b;
while (a/2 >= d)// a/2 是为了防止 2*d >INT_MAX 同时 a >= 2*d,为后面做准备
{
d = 2 * d;
c = 2 * c;
}
a = a - d;//c 指 d 代表 c 个 b
res = res + c;
}
if (sign == -1)
res = -res;
return res;
}



![MyBatis-Plus是什么以及特性[MyBatis-Plus系列] - 第481篇](https://img-blog.csdnimg.cn/img_convert/192e5270eaf41e64aa81bf5018b9b0fa.png)










![[深度学习入门]PyTorch深度学习[数组变形、批量处理、通用函数、广播机制]](https://img-blog.csdnimg.cn/668931d825b54ac8ae609fd4a81d384f.png)




