Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 破解编码面试的算法似乎做错了什么_Algorithm_Sum - Fatal编程技术网

Algorithm 破解编码面试的算法似乎做错了什么

Algorithm 破解编码面试的算法似乎做错了什么,algorithm,sum,Algorithm,Sum,我是一名计算机科学专业的学生,大约一周前我买了一本破解编码的书。我只是在大O章,我发现了一个算法,可以把数字相加;乍一看,它看起来很混乱,所以我用Python运行了它,但它并没有做它应该做的事情。看看: int sumDigits(int n) { int sum= 0; while (n > 0) { sum += n % 10; n /= 10; } return sum; } 据我所知,这段代码实际上并没有返回给定数字的位数之和,或者是这样吗?我真的

我是一名计算机科学专业的学生,大约一周前我买了一本破解编码的书。我只是在大O章,我发现了一个算法,可以把数字相加;乍一看,它看起来很混乱,所以我用Python运行了它,但它并没有做它应该做的事情。看看:

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,我不确定这一变化是什么时候发生的……它与整数除法有关(我不得不使用//而不是/)。