Android Studio умножается, получая странный результат - PullRequest
1 голос
/ 22 марта 2019

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

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

        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");
        }

В logcat я вижу правильные числа в массиве. Например, если я попробую 357, то получу в результате

I / 3: массив I / 51: сумма

I / 5: массив I / 2703: сумма

I / 7: массив I / 148665: сумма

Но если я просто вычислю 3 * 5 * 7, все будет хорошо. Чего мне не хватает?

1 Ответ

1 голос
/ 22 марта 2019

То, что вы получаете в качестве вывода, это нормально

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...