Сделайте это, распечатайте переменную i
рядом с циклом for и посмотрите, как часто она выполняется.Это неэффективно и является пустой тратой ресурсов.
Вы также должны учитывать следующее?
Какова сложность времени?Чем отличается цикл while от цикла for с использованием temp?
Когда вы переключились на цикл for, вы не учитывали, что происходит, переменная num в цикле while.Предположим, число с n цифрами находится между 10^(n-1)
включительно и 10^n
исключительно.Если мы позволим n
быть числом цифр в N, то неравенство будет 10^(n-1) <= N < 10^n
.Отсюда мы находим, что сложность по времени равна O (log (n)).В числовом выражении примерно log10(num)
цифр.
Ваше решение правильное, оно дает правильный ответ, но неэффективно с точки зрения производительности.Во-первых, вы должны уменьшить индекс цикла как таковой.
for (i = temp ; i !=0; i /= 10)
Это было бы более правильным, если использовать цикл for.Это будет выполняться столько же раз, сколько и цикл while, но потребуется уменьшить значение i и проверить, если i != 0
для итерации.