Android Studio умножает, получая странный результат

Я пытаюсь умножить массив чисел. Должно быть довольно просто, но по какой-то причине я получаю огромные числа и не могу понять, где я делаю неправильно.

Я ввожу число, оно разбивается на массив, проходит по числам и умножает их.

        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, все работает нормально. Что мне не хватает?

2
0
159
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы получаете на выходе, в порядке

Потому что вы умножаете значения ASCII числа, а не сами числа

Значения ASCII 3 равны 51, 5 равны 53, их умножение приводит к правильному результату 2703 и так далее.

Если вы хотите использовать целочисленное умножение, вы должны использовать преобразование массива символов в целочисленный массив или учитывать значения ASCII при умножении.

Пример: sum *= (iArray[x].toLong()-'0') что-то вроде этого, я не знаю kotlin, как вы могли уже заметить. :)

Спасибо, я уже давно присматриваюсь к этому, но теперь это имеет смысл. Исправлено путем изменения: sum *= Character.getNumericValue(iArray[x].toInt())

user5860 22.03.2019 07:42

Другие вопросы по теме