【发布时间】:2017-02-09 09:10:49
【问题描述】:
谁能给我解释一下下面代码的时间复杂度:
cin >> n;
while(n>9)
{
int num = n;
int s = 0;
while(num!=0)
{
s = s + num%10;
num = num/10;
}
n = s;
}
cout<<n<<endl;
上面的代码计算数字的各位数字的总和,直到总和变成一位数。
例如:45859 = 4+5+8+5+9 = 31 = 3+1 = 4
编辑:我认为计算数字总和的内循环具有 O(log_base_10(n)) 复杂度,但外循环一直持续到到目前为止获得的总和小于 10。所以总复杂度取决于外循环要运行多少次。我无法弄清楚...计算外循环复杂度的某种数学噱头会有所帮助!!!
【问题讨论】:
-
复杂性体现在哪些方面?从智力的角度来看,复杂性趋于为零。
-
我的直觉告诉我这是
O( N * M ),其中 N 是初始输入的大小,M 与每个数字的平均值成正比。但是由于 M 不能高于9 * k,所以我只考虑它O(N) -
计算大 O 是编程中的一种仪式。除非您说出您的想法和原因,否则您不会在 Stack Overflow 上获得太多有用的帮助。然后你可能会得到 cmets 说“你知道了”或解释你为什么错的答案,你可能会从中推断出正确的答案。
-
投反对票,因为这对其他人没有用处。 SO 不是帮助台。
标签: c++ algorithm time-complexity