¿Se puede asignar / networkingucir una cadena en un int?

Estaba solucionando un problema en las fuerzas de código en el que tenía que resumir los dígitos de un número grande (puede tener hasta 100 mil dígitos) y tendría que repetir ese process hasta que solo quede un dígito y contar el número de dígitos. veces lo hice y se me ocurrió una solución de trabajo, sin embargo, me gustaría saber si algunas cosas se podrían haber hecho de una manera más "Kotlin-ish", por lo tanto:

fun main(args: Array<String>) { println(transform(readLine()!!)) } fun transform(n: String): Int { var count = 0 var sum : Int var s = n while(s.length > 1) { sum = (0 until s.length).sumBy { s[it].toInt() - '0'.toInt() } s = sum.toString() count++ } return count } 
  1. sum = (0 until s.length).sumBy { s[it].toInt() - '0'.toInt() } ¿Hay alguna manera de adivinar la sum de dígitos en la cadena a la variable sum, o en general, ¿un mejor enfoque que el que yo usé?
  2. Al convertir un Char a un Int, lo convierte al valor ASCII, así que tuve que agregar "-'0'.toInt ()" ¿hay una manera más rápida (no es demasiado escribir, preguntar por curiosidad)?
  3. ¿Cómo hacer que el String n mutable sin crear un nuevo String y manipularlo? ¿O es esa la forma deseada (y única)?

PD: soy un principiante con Kotlin.

Al convertir un Char a un Int, lo convierte al valor ASCII, así que tuve que agregar "-'0'.toInt ()" ¿hay una manera más rápida (no es demasiado escribir, preguntar por curiosidad)?

Simplemente puede escribir s[it] - '0' , porque restar Chars en Kotlin ya le da un Int:

 public class Char ... { ... /** Subtracts the other Char value from this value resulting an Int. */ public operator fun minus(other: Char): Int ... } 

Pero, ¿por qué se repiten los índices cuando se puede pasar por encima de los Chars directamente?

 sum = s.sumBy { it - '0' } 

Este es un estilo funcional (y recursivo) para resolverlo:

 private fun sum(num: String, count: Int) : Int { return num //digit to int .map { "$it".toInt() } //sum digits .sum() //sum to string .toString() //if sum's length is more than one, do it again with incremented count. Otherwise, return the current count .let { if (it.length > 1) sum(it, count + 1) else count } } 

Y lo llamas así:

 val number = "2937649827364918308623946..." //and so on val count = sum(number, 0) 

¡Espero eso ayude!