如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人的经验 ,比如准备简历实习上岸经历校招总结阿里、字节、腾讯、美团等一二线大厂真实面经也欢迎来一起参加秋招打卡活动 等;如果你是计算机小白,学习/转行/校招路上感到迷茫或者需要帮助,可以点此联系阿秀;免费分享阿秀个人学习计算机以来的收集到的好资源,点此白嫖;如果你需要《阿秀的学习笔记》网站中求职相关知识点的PDF版本的话,可以点此下载

# 29. 两数相除 没想明白

力扣原题链接(点我直达) (opens new window)

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

示例 1:

输入: dividend = 10, divisor = 3 输出: 3 示例 2:

输入: dividend = 7, divisor = -3 输出: -2 说明:

被除数和除数均为 32 位有符号整数。 除数不为 0。 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。

# 第一版 个人版本,超时了

int divide(int dividend, int divisor) {//被除数和除数都是整数,且结果不能溢出
	if (dividend == INT_MIN && divisor == -1) return INT_MAX;
	if (dividend == 0) return 0;
	int signal = -1;
	if ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0))  signal = 1;
	if (signal == 1)
	{
		signal = 0;
		if (dividend > 0)
		{
			while (dividend >= 0 && signal<=INT_MAX) {
				dividend -= divisor;
				signal += 1;
			}		
		}
		else {
			while (dividend <= 0 && signal <= INT_MAX) {
				dividend -= divisor;
				signal += 1;
			}
		}
		return signal==	INT_MAX?INT_MAX:signal-1;
	}
	else
	{
		signal = 0;
		if (dividend > 0)
		{
			while (dividend >= 0 && signal>=INT_MIN) {
				dividend += divisor;
				signal -= 1;
			}
		}
		else {
			while (dividend <= 0 && signal >= INT_MIN) {
				dividend += divisor;
				signal -= 1;
			}
		}
		return signal == INT_MIN ? INT_MIN : signal + 1;
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42