给定两个整数 a
和 b
,求它们的除法的商 a/b
,要求不得使用乘号 '*'
、除号 '/'
以及求余符号 '%'
。
注意:
- 整数除法的结果应当截去(
truncate
)其小数部分,例如:truncate(8.345) = 8
以及truncate(-2.7335) = -2
- 假设我们的环境只能存储 32 位有符号整数,其数值范围是
[−231, 231−1]
。本题中,如果除法结果溢出,则返回231 − 1
示例 1:
输入:a = 15, b = 2 输出:7 解释:15/2 = truncate(7.5) = 7
示例 2:
输入:a = 7, b = -3 输出:-2 解释:7/-3 = truncate(-2.33333..) = -2
示例 3:
输入:a = 0, b = 1 输出:0
示例 4:
输入:a = 1, b = 1 输出:1
提示:
-231 <= a, b <= 231 - 1
b != 0
-
public class Solution { public int Divide(int a, int b) { //被除数为最小值的情况 if(a == int.MinValue){ if(b == 1) return int.MinValue; if(b == -1) return int.MaxValue; } //除数为最小值情况 if(b == int.MinValue) return a == int.MinValue ? 1 : 0; //被除数为0 if(a == 0) return 0; bool isF = false; if(a>0){ a = -a; isF = !isF; } if(b>0){ b = -b; isF = !isF; } List<int> candidates = new List<int>(); candidates.Add(b); int index = 0; while(candidates[index] >= a-candidates[index]){ candidates.Add(candidates[index]+candidates[index]); index++; } int res = 0; for(int i = candidates.Count-1;i>=0;--i){ if(candidates[i]>=a){ res +=1<<i; a-=candidates[i]; } } return isF?-res:res; } }
简单题~真简单!!!!!