您的位置:首页 > 编程语言

每日一道算法题:编程实现两个数的除法,当然不能用除法操作符

2014-11-17 23:31 796 查看
题目:编程实现两个数的除法,当然不能用除法操作符

// return  x/y
int div(const int x, const int y)
{
...
}
解题思路:开始想到的是通过比较x和y之间的大小来求出商,将除法看成减法来运算,判断x-y之后的值,代码如下:

int div(const int x, const int y){
int result = 0;
if (y < 0){
cerr << "Error!" << endl;
exit(1);
}
if (x < y){
return 0;
}
int temp = x;
while (temp >= y){
temp -= y;
++ result;
}
return result;
}
但是当x值很大,y值很小时,代码就运行的非常慢了。以10000/3为例,每次都减去一个3,要做3333次减法才行;那试想每次减数都是上一次减数的2倍,10000-2048*3=3856,继续循环,最终10000=2048*3 + 1024*3 + 256*3 + 4*3 + 1*3 + 1,这样,将2的倍数转化为右移操作来实现,代码如下:

int div1(const int x, const int y){
if (y == 0){
cerr << "Error!" << endl;
exit(1);
}
if (x < y){
return 0;
}
int temp = x, result = 0;
while (temp >= y){
int mul = 1;
while (y * mul <= (temp >> 1)){
mul = mul << 1;
}
result += mul;
temp -= y * mul;
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐