Форум программистов, компьютерный форум CyberForum.ru

Умножение двух длинных чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Noob77
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 23
14.04.2014, 11:42     Умножение двух длинных чисел #1
Приветствую, помогите исправить процедуру умножения двух длинных чисел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void CALL_TYPE  Multiply(unsigned char *u,int N, unsigned char *v,int M,unsigned char* W)
{ // U и V умножаемые числа
    char k = 0;
    long b = 256,temp_word;
    for( int j=M-1;j>=0;j--)
        if(!(v[j]==0))
        {
            k=0;// i= N-1;
            for(int i=N-1; i>=0;i--)
            {
                temp_word=W[i+j+1]+u[i]*v[j]+k;
                W[i+j+1]=temp_word % b; // берем младший байт слова
                k = temp_word/b;// получаем старший байт
                
            }
            W[j]=k;
        }
}
Работает но не всегда, например FFFFFF * FF = EEEFEFF01
А в других случаях работает..непойму где ошибка?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2014, 11:42     Умножение двух длинных чисел
Посмотрите здесь:

Умножение длинных целых 11-ричных чисел в виде строк. C++
Быстрое умножение длинных чисел. C++
C++ Длинная арифметика. Умножение двух длинных чисел.
Сложение двух длинных чисел. C++
C++ Умножение длинных чисел с фиксированной запятой
Умножение длинных чисел C++
C++ Умножение длинных чисел
C++ Длинная арифметика: умножение двух длинных чисел

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
14.04.2014, 14:01     Умножение двух длинных чисел #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Почему смешиваете знаковые и беззнаковые переменные? Поставьте unsigned char, unsigned long
Сам алгоритм неправильный. Может получиться, что k>256. Нужно вводить еще один цикл. Перенос в одном разряде может вызвать перенос в более старшем разряде и т. д. до самого старшего.
Noob77
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 23
15.04.2014, 10:19  [ТС]     Умножение двух длинных чисел #3
Точно) Добавил unsigned и все заработало!)
Yandex
Объявления
15.04.2014, 10:19     Умножение двух длинных чисел
Ответ Создать тему
Опции темы

Текущее время: 18:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru