leetcode-29. 两数相除
题目:
代码:
#include <iostream>
#include <cmath>
using namespace std;
int div(long a,long b){
if(a<b){
return 0;
}
long tb=b;
int count=1;
while(tb+tb<a){
count=count+count;
tb=tb+tb;
}
return count+div(a-tb,b);
}
int divide(int dividend, int divisor) {
if(dividend==0){
return 0;
}else if(divisor==1){
return dividend;
}else if(divisor==-1){
if(dividend==-pow(2,31)){
return pow(2,31)-1;
}else{
return -dividend;
}
}
long a=dividend,b=divisor;
long res;
int sign=0;
if((dividend<0&&divisor>0)||(dividend>0&&divisor<0)){
sign=1;
}
a=a>0?a:-a;
b=b>0?b:-b;
res=div(a,b);
if(sign==0){
if(res>=pow(2,31)){
return pow(2,31)-1;
}
}else{
res=-res;
}
return res;
}
int main(){
int ans;
int dividend, divisor;
cin>>dividend>>divisor;
ans=divide(dividend, divisor);
cout<<ans;
return 0;
}