题目要求:给定两个整数,要求不用乘除法和取模运算,计算出a/b的值,当结果越界的时候输出INT最大值
解题思路:
用两个数组暂存b对应的倍数,和相应的系数
long long ABS(long long a)
{
return a > 0 ? a : -a;
}
int divide(int dividend, int divisor)
{
if (divisor == 0 || (dividend == INT_MIN && divisor == -1))
return INT_MAX;
long long a = ABS((long long)dividend);
long long b = ABS((long long)divisor);
long long sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
long long res=0;
long long tmp[33], times[33];
//第一组数据填充
tmp[0] = b;
times[0] = 1;
int index = 0;
//一直填充到临界大于a的位置
while (a >= tmp[index] && index < 33)
{
index++;
tmp[index] = tmp[index - 1] + tmp[index - 1];
times[index] = times[index - 1] + times[index - 1];
}
//遍历填充数据
for (int j = index - 1; j >= 0; j--)
{
while (a >= tmp[j])
{
res += times[j];
a -= tmp[j];
}
}
res = (sign == 1) ? res : -res;
return (int)res;
}
这里一直无法解决的一个问题,通过重写了取绝对值方法而生效