Я пытаюсь умножить массив чисел. Должно быть довольно просто, но по какой-то причине я получаю огромные числа и не могу понять, где я делаю неправильно.
Я ввожу число, оно разбивается на массив, проходит по числам и умножает их.
var iArray = i.toString().toCharArray()
var iCount = iArray.count().toString()
var x = 0
var sum: Long = 1
while(x < iCount.toInt()) {
Log.i(iArray[x].toString(), "array");
sum *= iArray[x].toLong()
x++
Log.i(sum.toString(), "sum");
}
В логарифме я вижу правильные числа в массиве. Например, если я попробую 357, вот что я получу в результате
I/3: массив I/51: сумма
I/5: массив I/2703: сумма
I/7: массив I/148665: сумма
Но если я просто вычисляю 3*5*7, все работает нормально. Что мне не хватает?
То, что вы получаете на выходе, в порядке
Потому что вы умножаете значения ASCII числа, а не сами числа
Значения ASCII 3 равны 51, 5 равны 53, их умножение приводит к правильному результату 2703 и так далее.
Если вы хотите использовать целочисленное умножение, вы должны использовать преобразование массива символов в целочисленный массив или учитывать значения ASCII при умножении.
Пример: sum *= (iArray[x].toLong()-'0') что-то вроде этого, я не знаю kotlin, как вы могли уже заметить. :)
Спасибо, я уже давно присматриваюсь к этому, но теперь это имеет смысл. Исправлено путем изменения: sum *= Character.getNumericValue(iArray[x].toInt())