题目:实现两个整数除法。
不能直接用除法运算实现两个整数的除法。如果直接用减法不断减除数(divisor),则会运行超时,于是我的方法是除数不断翻倍再跟被除数(dividend)比较,如果超过了被除数,则在上次的除数上增加。注意符号跟数据越界!
int dividres=0;
int flag=0;
int divide(long long dividend, long long divisor, float cont)
{
cont=cont*2; //系数不断翻倍
if(dividend < divisor*cont) //被除数小于除数
{
dividres=dividres+cont/2; //记录结果
if(cont ==1 ) return dividres; //除数没有增加,已除完
dividend=dividend-divisor*cont/2;
cont=0.5; //系数重置
}
if(dividend == divisor*cont) //已除完
{
dividres=dividres+cont;
return dividres;
}
dividres=divide(dividend, divisor, cont) ;
return dividres;
}
int divide(long long dividend, long long divisor)
{
float cont=0.5;
if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0))
flag = 1;
long long divd=abs((long long) dividend);
long long divor=abs((long long) divisor);
dividres=dividesub(divd, divor, cont);
dividres=-dividres;
return dividres;
}