Идея абсолютно правильная, реализация ошибочна.
Во первых, при вызове log10 происходит автоматическое преобразование целого в double. Но в double мантисса имеет длину 53 бита. Так что для чисел >= 2⁵³ = 9007199254740992 появится ошибка преобразования и правильность ответа не гарантирована.
Во вторых, ошибочно округление. Не должно быть никаких round. Правильная формула:
floor(log10(number)) + 1
Количество знаков натурального числа на 1 больше целой части десятичного логарифма этого числа.
P.S. Ещё один способ без явных циклов: преобразовать число в строку и взять длину этой строки.
Насколько это законно?
Можно ли пользоваться таким способом, вместо циклов?