我正在学习 kotlin 并遇到了问题。
输入是一个由不带空格的整数组成的字符串。有必要找到偶数的总和并将算法作为一个单独的函数来实现。
请注意,对于第 660308340 行,输出将为 24 (6+6+8+4)。
一切都会好的,但只是在循环中出于某种原因我总是添加 54,并且这一行的输出变为 360。
为了检查,我在循环中添加了当前处理的数字 (i) 的值的输出和值 b。i 显示正确,但此处 b 由于某种原因,每次新通过都会增加 54
fun calculateEvenDigits(input:String): Int{
var b = 0
for(i in input){
if (i.toInt() % 2 == 0){
b+=i.toInt()
println("i = $i, b = $b")
}
}
return b
}
fun main(args: Array<String>) {
val a : String? = readLine()
if(a!=null){
print(calculateEvenDigits(a.toString()))
}
}
我们将 Char 转换为 String,然后再转换为 Int,否则我们得到字符代码。
当您使用 方法转换字符串字符时
toInt(),您会得到字符代码(例如'0'.toInt() == 48)而不是数字的值。您可以从每个字符中减去零代码,然后得到一个数值(我们假设输入处只有数字):对于字符串,
660308340输出将是:您也可以使用该方法
Character.getNumericValue。对于字符 from'0'to'9'它返回相应的数值,对于拉丁字母 from'a'to'z'和 from'A'to 它'Z'返回从 10 到 35 的值,对于其他字符它返回 -1。在上面的代码示例中,只需将行更改val digit = c - '0'为val digit = Character.getNumericValue(c).这样写就容易多了,意思和上面差不多,只是稍微通过其他函数就知道了(目前我只是在学习Kotlin),可能不太对