Algorithm 破解编码面试的算法似乎做错了什么
我是一名计算机科学专业的学生,大约一周前我买了一本破解编码的书。我只是在大O章,我发现了一个算法,可以把数字相加;乍一看,它看起来很混乱,所以我用Python运行了它,但它并没有做它应该做的事情。看看:Algorithm 破解编码面试的算法似乎做错了什么,algorithm,sum,Algorithm,Sum,我是一名计算机科学专业的学生,大约一周前我买了一本破解编码的书。我只是在大O章,我发现了一个算法,可以把数字相加;乍一看,它看起来很混乱,所以我用Python运行了它,但它并没有做它应该做的事情。看看: int sumDigits(int n) { int sum= 0; while (n > 0) { sum += n % 10; n /= 10; } return sum; } 据我所知,这段代码实际上并没有返回给定数字的位数之和,或者是这样吗?我真的
int sumDigits(int n) {
int sum= 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
据我所知,这段代码实际上并没有返回给定数字的位数之和,或者是这样吗?我真的很想看看它是如何做到这一点的,但由于我在Python中尝试的示例不起作用,我真的看不出它是如何工作的。此算法取决于
n/=10
的存在(即5/2==2
)。如果您使用的是Python 3,则需要使用/
,因此它可能如下所示:
def sumDigits(n):
sum = 0
while n > 0:
sum += n % 10
n //= 10 # integer division
return sum
sumDigits(123) # 6
代码是正确的,可以按预期工作。您可以干运行代码。以数字1234为例。 以下是while循环每次迭代后的输出 总数
01234
4123
7 12
9.1
10 0
很明显,在while循环的每次迭代中,n%10给出的最后一个数字被添加到总和中。此外,在下一步中,数字本身被10除(n/=10),这样最后第二个数字现在成为除法后的最后一个数字,可以安全地添加到总和中。如果需要单位数输出,则
n%9!=0 ? n%9:9
更多细节在这里,更准确的说法是“如果您使用的是Python3”,因为对/
语义的更改从一开始就是Python3的一部分。截断除法操作符/
于2001年在Python2.2中引入。感谢@rici,我不确定这一变化是什么时候发生的……它与整数除法有关(我不得不使用//而不是/)。