Yanılıyorsunuz, 0'dan başlayıp saymıyor yazılan kod, while döngüsü tam olarak basamak sayısı kadar dönmekte (O(log( n )) time complexity). Sizin önerdiğiniz çözümdeki gereksiz str dönüşümü (casting) de yapılmadığı için daha iyi (efficient) bi çözüm olduğunu söylemek de mümkün.
Haklısınız uzerine cok dusunmeden yazdim, 0'dan baslamiyor. Fakat benim onerdigimle sizin onerdiginizi complier edip execution timelarini compare ederseniz castingin loopingten daha efficient oldugunu goreceksiniz.