Форум программистов, компьютерный форум, киберфорум
Наши страницы

Нужно исправить умножение столбиком - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Ощибка в генерации файла .apk в grandle.build http://www.cyberforum.ru/android-dev/thread1549513.html
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Я недавно прочитал в интернете о том, как создать апк файл в андроид студио через grandle.build. Я вроде сделал все правильно, но...
Программирование Android Ко всем элементам меню применяется последняя иконка Здравствуйте! Никак не могу понять из-за чего так происходит... Есть код: for(int i = 0; i < ts.size(); ++i) { final Table.Timetable t = ts.get(i); final MenuItem item =... http://www.cyberforum.ru/android-dev/thread1549300.html
Программирование Android Что использовать java.net или android.net ?
Приветствую всех Java-ведов и Android-o-водов! Снова необходим соовет старших братьев. Почему для работы c сетью в Android приложениях 2 API - java.net и android.net:wall:? И что использовать для...
Программирование Android Нечто про Андройд и С++
Среда: Эклипс. Библиотека компилится там же. Проблема: не получается использовать пространство std и/или нужно/можно ли его вообще включать? - не видит #include<iostream> . Цель первая: прочитать...
Программирование Android В чем разница между ViewHolder и ConvertView? http://www.cyberforum.ru/android-dev/thread1548971.html
Добрый вечер! Уже сутки не могу уловить разницу между смыслом паттерна ViewHolder и параметра ConvertView(функции getView при создании адаптера). Как я понял, смысл паттерна ViewHolder - сохранение...
Программирование Android Распознавание текста с камеры Добрый день. Подскажите пожалуйста, есть ли библиотеки, которые позволяют определять с фото текст или цифры? К примеру сфотографировать число 10, и приложение в int или string преобразовало это число? подробнее

Показать сообщение отдельно
b0nny
4 / 2 / 0
Регистрация: 11.11.2013
Сообщений: 347

Нужно исправить умножение столбиком - Программирование Android

11.10.2015, 13:32. Просмотров 266. Ответов 4
Метки (Все метки)

Помогите исправить умножение столбиком. C Multiply - всё чётко. Получаем результат умножения текущего разряда (2-го числа) на первое число.
Далее в конец числа добавляем 0. Ниже я отобразил где это происходит, я поставил там звёздочку *.
Картинка 1

n2 = result - ArrayList - на начальном этапе ничего не имеет в себе.
Функция - Addition(отдаёт обратно result) складывает два числа. Я складываю n2 (которое равно = rusult) и tmp.

Для интереса в конце написал if (i == 0) break; , чтобы посмотреть результат. result я получаю - 1056, т.к. сложило tmp = 1056 + 0000 (ибо сначала он ничему не равен).
Если дальше, то
Картинка 2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                    ArrayList<Integer> tmp = new ArrayList<Integer>();
                    ArrayList<Integer> n2 = new ArrayList<Integer>();
                    for (int i = 0; i < arrayNum1.size(); i++)
                    {
                        tmp = Multiply(arrayNum1, arrayNum2.get(i), sys); // умножаем текущий разряд числа на другое длинное число
                        for (int j = 0; j < i; j++) // сдвигаем
                        {
                            // Переворачиваем, чтобы добавить в конец числа 0, а потом обратно
                            Collections.reverse(tmp);
                            tmp.add(0);
                            Collections.reverse(tmp);
                        }
                        n2 = result;
                        Addition(tmp.size(), sys, temp, n2, tmp, result);
                        //if (i == 0) break;
                    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public static ArrayList<Integer> Multiply(ArrayList<Integer> num1, int value, int sys) {
        int temp = 0;
        ArrayList<Integer> ans = new ArrayList<Integer>();
        for (int i = 0; i < num1.size(); i++) {
            long tmp = (long) num1.get(i) * (long) value + temp;
            ans.add((int) (tmp % sys));
            temp = (int) (tmp / sys);
        }
        ans.add(temp);
 
        // Удаляем лишние нули
        while (ans.size() > 0 && ans.get(ans.size() - 1) == 0) {
            ans.remove(ans.size() - 1);
        }
        return ans;
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public static ArrayList<Integer> Addition(int length, int sys, int temp, ArrayList<Integer> num1, ArrayList<Integer> num2, ArrayList<Integer> result) {
        for (int i = 0; i < length; i++) {
            int tempA = (num1.size() > i) ? num1.get(i) : 0; // Временное значение i-го разряда из первого числа
            int tempB = (num2.size() > i) ? num2.get(i) : 0; // Временное значение i-го разряда из второго числа
            result.add(tempA + tempB + temp);
            if (result.get(i) >= sys) {
                result.set(i, result.get(i) - sys);
                temp = 1;
            } else {
                temp = 0;
            }
        }
 
        // Увеличиваем массив
        if (temp == 1) {
            result.add(temp);
        }
        return result;
    }
0
Изображения
  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru