Вот код:
int sumDigits(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
Я понимаю этот код, и этот код будет занимать одну цифру, добавлять эту цифру к сумме и удалять эту цифру. Он продолжает делать это до тех пор, пока n не станет равно 0, и в этот момент он вернет сумму. Интуитивно понятно, что во время выполнения будет количество цифр в числе N. Но я не понимаю, почему эта временная сложность равна O (logN). Я думал, что это O (N).
Даже с объяснениями вроде:
«Число с цифрами d может иметь значение до 10 ^ d. Если n = 10 ^ d, то d = log n. Следовательно, время выполнения равно O (logN)». не полностью нажмите.
Я следую первой части, что если d, скажем, 3, то значение <10 ^ d == значение <1000. Значение max равно 999 с числом длины 3, с которым я согласен. Но после этого, когда они устанавливают связь, что, если n = 10 ^ d, я не понимаю, как 1) они знали, что такое равенство и 2) как это делает сложность O (logN), а не O (N). </p>