Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - программа перемножения длинных чисел на С++

Ответить
Настройки темы
C/C++ - программа перемножения длинных чисел на С++

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите написать программу реализующую алгоритмы (умножение «столбиком», метод Карацубы, БПФ) перемножения длинных чисел в зависимости от параметров исходных данных (чисел) на С++
Если можно, с пояснениями

Отправлено: 18:28, 02-05-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Lyanni, как обычно, с вас черновики решения, с нас поправки и наводящие вопросы.
БПФ - быстрое преобразование Фурье? С Википедией сверялись?
умножение столбиком - это как должно выглядеть?

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 21:54, 02-05-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Алгоритмумножения «в столбик» длинных чисел С = А*В длины n цифр
1) C := 0; (достаточно обнулить n младших цифр)
2) для i = 0 … n-1 выполнить шаги 3-8;
3) d :=0;
4) для j = 0 … n-1 выполнить шаги 3-5;
5) T :=Ci+j + Ai*Bi +d;
6) Ci+j : = LODIGIT(T);
7) d := HIDIGIT(T);
8) Ci+n := d;
9) конец.

БПф - быстрое преобразование фурье
Тогда функция для перемножения двух многочленов будет выглядеть следующим образом:
void multiply (const vector<int> & a, const vector<int> & b, vector<int> & res) {
vector<base> fa (a.begin(), a.end()), fb (b.begin(), b.end());
size_t n = 1;
while (n < max (a.size(), b.size())) n <<= 1;
n <<= 1;
fa.resize (n), fb.resize (n);

fft (fa, false), fft (fb, false);
for (size_t i=0; i<n; ++i)
fa[i] *= fb[i];
fft (fa, true);

res.resize (n);
for (size_t i=0; i<n; ++i)
res[i] = int (fa[i].real() + 0.5);
функция для перемножения двух длинных чисел практически ничем не отличается от функции для перемножения многочленов. Единственная особенность — что после выполнения умножения чисел как многочлены их следует нормализовать, т.е. выполнить все переносы разрядов:
int carry = 0;
for (size_t i=0; i<n; ++i) {
res[i] += carry;
carry = res[i] / 10;
res[i] %= 10;

Без понятия как это сбить в одну прогу, сама учусь на мат. факе (будущий учитель математики), дали курсовую по такой теме на С++, С++ не проходила...

Отправлено: 00:06, 03-05-2011 | #3


Новый участник


Сообщения: 15
Благодарности: 6

Профиль | Отправить PM | Цитировать


например так:
Код: Выделить весь код
cout << "Выберите алгоритм по номеру:" << endl << "1. умножение в столбик" << endl
		<< "2. быстрое преобразование Фурье" << endl << "3. ..." << endl;
int i;
cin >> i;
switch(i)
{
...
}

-------
Ничто так не разрушает мечты, как компромисс..


Отправлено: 10:48, 03-05-2011 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - программа перемножения длинных чисел на С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Материнская плата 4 длинных сигнала Alek Sk Материнские платы и память 7 15-11-2020 10:57
[решено] мать gigabyte ga-g31m Семь длинных сигналов last-77 Материнские платы и память 11 20-09-2010 10:54
При включении короткий гудок, потом один или два длинных(по разному) и отрубается qwerty1999 Непонятные проблемы с Железом 2 28-07-2009 09:54
C/C++ - Последовательность чисел denver-312 Программирование и базы данных 7 02-01-2008 20:54
Потеря длинных пакетов в локальной сети Rever Сетевые технологии 16 26-06-2003 17:18




 
Переход