概述
int divint(const int x, const int y)
{
int left_num = x;
//被除数
int result = 0;
// 商
int multi;
// 乘数
while (left_num >= y)
//被除数大于除数时不断循环
{
multi = 1;
// 每一轮除法就是找一个数乘以除数,这个乘数每次都从1开始。
while (y * multi <=left_num) // 循环寻找乘以除数大于被除数的乘因子
{
multi = multi << 1;
//加快寻找步长,乘因子在原来基础上乘以2。也可以每次只走一步,但是太慢。
}
multi = multi >> 1; // 由于跳出上一个while循环时跨的步长太大,导致y * multi 结果远远大于left_num。所以乘因子应该返回上一不。
result += multi;
left_num -= y * multi;
//求解余数,如果余数小于除数,则不满足除法条件,跳出循环,否则继续。
}
return result;
}
//普通方法,做除法就是做减法
int div_int( int dividend, int divisor){
int result = 0;
while((dividend -= divisor) >= 0){
result++;
}
return result;
}
// 加快步长方法
int div_int_quick(int dividend, int divisor){
int result = 0;
int count = 1;
int divisor_copy = divisor;
while( dividend >= divisor){
while( dividend >= divisor_copy){
divisor_copy <<= 1;
count <<= 1;
}
result += (count >> 1);
count = 1;
dividend -= (divisor_copy >> 1);
divisor_copy = divisor;
}
return result;
}
// 递归实现
int div_int_quick_calc(int dividend, int divisor){
int count = 1;
int divisor_copy = divisor;
if (dividend < divisor)
return 0;
while( dividend >= divisor_copy){
divisor_copy <<= 1;
count <<= 1;
}
dividend -= (divisor_copy >> 1);
return ((count >> 1) + div_int_quick_calc(dividend,divisor));
}
最后
以上就是风趣画笔为你收集整理的整数除法的全部内容,希望文章能够帮你解决整数除法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复