赞
踩
题目:
题解:
- int divide(int dividend, int divisor){
- int cnt = 0;
- int sign = 1;
- if ((dividend ^ divisor) < 0) { // 两数任意一个为负数
- sign = -1;
- }
- if (divisor == INT_MIN) { // 除数边界值特殊处理
- if (dividend == INT_MIN) {
- return 1;
- } else {
- return 0;
- }
- }
- if (dividend == INT_MIN) { // 被除数边界值特殊处理
- if (divisor == -1) {
- return INT_MAX;
- } else if (divisor == 1) {
- return INT_MIN;
- }
- dividend += abs(divisor); // 先执行一次加操作,避免abs转换溢出
- cnt++;
- }
- int a = abs(dividend);
- int b = abs(divisor);
- while (a >= b) {
- int c = 1;
- int s = b;
- // 需指数级快速逼近,以避免执行超时
- while (s < (a >> 1)) { // 逼近至一半,同时避免溢出
- s += s;
- c += c;
- }
- cnt += c;
- a -= s;
- }
- return (sign == -1) ? -cnt : cnt;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。