思路1:暴力减法,每次加1
思路2:每次除数自身相加,res自身相加,以倍数增加
//BF思路1:
class Solution {
public:
int divide(int dividend, int divisor) {//a/b 10/3
int res = 0;
if (dividend == 0)return 0;//a为0
if (divisor == 1)return dividend;//b为1
if (divisor == -1 && dividend == INT_MIN) return INT_MAX;//b=-1,最小负数转正会溢出
if (divisor == -1)return -dividend;
if (divisor == INT_MIN) {
if (dividend == INT_MIN)return 1;
else return 0;
}
//边界
bool f = false;//负数
if ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) {
f = true;
}
else {
f = false;
}
if (dividend == INT_MIN) {
if (f) {//正数
res++;
dividend -= divisor;
}
else {//负数
res++;
dividend += divisor;
}
}
dividend = (dividend > 0 ? dividend : -dividend);
divisor = (divisor > 0 ? divisor : -divisor);
while (dividend >= divisor) {
res++;
dividend -= divisor;
}
return f ? res : -res;
}
};
# include<iostream>
# include<vector>
# include<string>
# include<algorithm>
# include<math.h>
# include<climits>
# include<stack>
# include<queue>
using namespace std;
int divide(int dividend, int divisor) {//a/b 10/3
int res = 0;
if (dividend == 0)return 0;//a为0
if (divisor == 1)return dividend;//b为1
if (divisor == -1 && dividend == INT_MIN) return INT_MAX;//b=-1,最小负数转正会溢出
if (divisor == -1)return -dividend;
if (divisor == INT_MIN) {
if (dividend == INT_MIN)return 1;
else return 0;
}
//边界
bool f = false;//负数
if ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) {
f = true;
}
else {
f = false;
}
if (dividend == INT_MIN) {//防止dividend最小无法转成正数
if (f) {//正数
res++;
dividend -= divisor;
}
else {//负数
res++;
dividend += divisor;
}
}
double dividend_;
double divisor_;
dividend_ = (dividend > 0 ? dividend : -dividend);
divisor_ = (divisor > 0 ? divisor : -divisor);
//数据预处理
//正式计算部分
int tpres;//res=res+tpres
int tpdivisor= divisor_;
int lastdivisor;
while (dividend_ >= divisor_) {
tpres = 1;
while ((divisor_ + divisor_ <=INT_MAX) && dividend_ >= (divisor_ + divisor_)) {//溢出判定
divisor_ += divisor_;
tpres+= tpres;
}
res += tpres;
dividend_ -= divisor_;
divisor_ = tpdivisor;
}
return f ? res : -res;
}
int main(void) {
cout << divide(2147483647, 2) << endl; //3 6 12-4 (24), 12和8 -
system("pause");
return 0;
}