每日一道算法题:编程实现两个数的除法,当然不能用除法操作符
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; }
相关文章推荐
- 结构之法 算法之道 面试题 9、编程实现两个正整数的除法 编程实现两个正整数的除法,当然不能用除法操作符。
- 编程实现两个正整数的除法,当然不能用除法操作符。
- java-编程实现两个正整数的除法,当然不能用除法操作符
- 编程实现两个正整数的除法,当然不能用除法操作符
- 编程实现两个正整数的除法,当然不能用除法操作符
- 微软面试题:编程实现两个正整数的除法,当然不能用除法操作符。
- 编程实现两个正整数的除法,当然不能用除法操作符
- 编程实现两个正整数的除法,当然不能用除法操作符
- 编程实现两个正整数的除法,当然不能用除法操作符。
- 微软面试题:编程实现两个正整数的除法,不能用除法操作符
- 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)
- [每日练习]编程实现两个正整数的除法
- 用栈实现队列(每日一道算法题)
- 实现能够返回最小值元素的栈(每日一道算法题)
- 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)
- 用一个栈实现另一个栈的排序(每日一道算法题)
- OpenCV编程案例:最大熵阈值分割算法实现
- 【每天算法2】:用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连。
- 每日一题:编写一个函数,不使用算术运算符,实现比较两个数的大小
- 编程实现两个正整数的除法