手机建设网站公司,响应式网页代码,微信手机网站设计6,wordpress怎么qq登录地址两数相除 给你两个整数#xff0c;被除数 dividend 和除数 divisor。将两数相除#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断#xff0c;也就是截去#xff08;truncate#xff09;其小数部分。例如#xff0c;8.345 将被截断为 8 #xff0c;-…两数相除 给你两个整数被除数 dividend 和除数 divisor。将两数相除要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断也就是截去truncate其小数部分。例如8.345 将被截断为 8 -2.7335 将被截断至 -2 。 返回被除数 dividend 除以除数 divisor 得到的 商 。 注意假设我们的环境只能存储 32 位 有符号整数其数值范围是 [−231, 231 − 1] 。本题中如果商 严格大于 231 − 1 则返回 231 − 1 如果商 严格小于 -231 则返回 -231 。 看到题第一反应这啥鬼除法不是很简单为啥要搞这么复杂 看了题解牛有点东西思路很好很清奇
1.边界判断 此处假设除数不为0 被除数为0结果必然为0 除数为1结果为被除数 除数为-1时一般情况只取反被除数就可以但注意题目要求32位范围是-2^31 ~ 2^31-1,假设被除数恰好是-2^31那么取反后越界了超过2^31-1因此返回INT32_MAX
2.开始运算 方便期间先标记结果的正负然后吧所有数据转成正数处理最后结果用标记处理正确即可 「快速乘」算法实现类似快速幂算法也是本体的核心具体实现见代码
方法一、类二分查找
Swift
func divide(_ dividend: Int, _ divisor: Int) - Int {//被除数为0if dividend 0 {return 0}//除数为1if divisor 1 {return dividend}if divisor -1 {// 如果被除数比最小值还小除以-1之后就会比边界值还大所以此时返回最大边界值其他情况返回相反数if dividend Int(Int32.min) {return -dividend}return Int(Int32.max)}// 结果是否为正数let sign dividend 0 divisor 0 || dividend 0 divisor 0let a dividend 0 ? dividend : -dividendlet b divisor 0 ? divisor : -divisorlet res div(a, b)return sign ? res : -res}func div(_ a: Int, _ b: Int) - Int {if a b {return 0}var count 1var result bwhile result result a {count countresult result}return count div(a-result, b)}OC
-(int32_t)divide:(int32_t)dividend divisor:(int32_t)divisor {if (dividend 0) {return 0;}if (divisor 1) {return dividend;}if (divisor -1) {if (dividend INT32_MIN) {return -dividend;}return INT32_MAX;}//结果正负标记bool isPositive (dividend 0 divisor 0) || ( dividend 0 divisor 0);int32_t a dividend 0 ? dividend : -dividend;int32_t b divisor 0 ? divisor : -divisor;int32_t res [self divide:a divisor:b];return isPositive ? res : -res;
}//「快速乘」算法
- (int32_t)divWithA:(int32_t)a b:(int32_t)b {if (a b) {return 0;}int32_t count 1;int32_t result b;while (result result a) {count count;result result;}return count [self divWithA:a-result b:b];
}