¿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!

  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • Kotlin: Confusión con lambdas y generics
  • La initialization lenta de la propiedad de la class Kotlin no comstackrá
  • Declaraciones múltiples anidadas en Kotlin
  • Inicializando matrices en kotlin
  • ObjectAnimator.ofFloat no puede tomar Int como parameters directamente en kotlin
  • Modificadores de acceso Kotlin
  • Hacer clic en una vista de text para cambiar el fragment
  • Kotlin filter lambda array usando el índice de iteración
  • Buscador de properties o setter esperado en Kotlin
  • android - Retrofit call void con Kotlin