* / mod 不能用
其实想想,乘法不就是加法嘛
a*b = b个a相加
x / y = n 其实是 x = ny + r
我们来累加y,知道ny >= x
就可以求的n了
但是这里又有个麻烦那的就是。。。累加的话,按我们的条件肯定是多算了一次啦
判断ny == x 不等就减去一次就ok
不过这样的结果就是TLE
INT_MAX和1,显然要枚举INT_MAX次
那肿么办。。。
一次一次的枚举确实有点2。。。
但就用增量吧,每次*2
这样的想法是对的
但是。。问题是,累加。。。最后还是多算,觉得处理起来很麻烦啊
那换个似乎。。。我们用x每次减去y
直到x < y,那就是刚好
经常遇到这样的问题,感觉很麻烦,换个角度就方便很多啊
class Solution { public: int divide(int dividend, int divisor) { // without using * / mod // using add auto sign = [=](int x) { return x < 0 ? -1 : 1; }; int d1 = sign(dividend); int d2 = sign(divisor); long long n1 = abs(static_cast<long long>(dividend)); long long n2 = abs(static_cast<long long>(divisor)); long long ans = 0; while(n1 >= n2) { long long base = n2; for(int i = 0 ; n1 >= base ; ++i) { n1 -= base; base <<= 1; ans += 1LL << i; } } int res = static_cast<int>(ans); if(d1 != d2) return -res; else return res; } };
by 1957