Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2009, 20:51   #1
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию Умножение огромных чисел

Такая проблема, нужно перемножить два огромных числа, которые не помещаются ни в один из стандартных типов delphi. Перемножение нужно сделать с помощью массивов, ну кажлую цифру числа загоняем в элемент массива типа byte и потом перемножаем как столбиком. Так вот у меня проблема, не доганю как реализовать перемножение столбиком, пока получается перемножить последнюю цифру первого числа на все цифры второго, а потом ведь надо делать смещение, а как не пойму. Подскажите пожалуйста.
Pedro вне форума Ответить с цитированием
Старый 19.04.2009, 21:16   #2
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

эммм... насколько большие числа? даже longint (или как там его?) не помогает?
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 19.04.2009, 21:28   #3
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Вот умножение длинных или больших чисел на Сях, уж извините на чем было на том и посылаю, при некотом умении можно приспособить для Дельфи, а там уже 10000 -значные числа можно перемножать... хватит надеюсь
Код:
#include<iostream.h>
#include<string.h>
void main()
{
 int x[256],y[256],z[257],q,p,i,j,k;
 for (i=1;i<=255;i++) {x[i]=0; y[i]=0; z[i]=0;}
 char str1[256],str2[256]; cin>>str1>>str2;
 int nx=strlen(str1); int ny=strlen(str2);
 for (i=1;i<=nx;i++) x[nx-i+1]=int(str1[i-1])-48;
 for (i=1;i<=ny;i++) y[ny-i+1]=int(str2[i-1])-48;

 for (j=1;j<=ny;j++)
  {
  p=0;
  for (i=1;i<=nx;i++)
  { q=z[i+j-1]+x[i]*y[j]+p;
 z[i+j-1]=q%10; p=q/10; }
  k=nx+j-1;
  while (p!=0) { k++; q=z[k]+p; z[k]=q%10; p=q/10; }
  }
 for (i=k;i>0;i--) cout<<z[i]; cout<<endl;
}
nusik вне форума Ответить с цитированием
Старый 19.04.2009, 21:32   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Это называется "Длинная арифметика". В интернете можно найти полно информации по этой теме, в том числе и реализации алгоритмов.
http://algolist.manual.ru/maths/longnum.php

Цитата:
Так вот у меня проблема, не доганю как реализовать перемножение столбиком, пока получается перемножить последнюю цифру первого числа на все цифры второго, а потом ведь надо делать смещение, а как не пойму.
Навскидку, там ведь нужно умножать и результат прибавлять к результирующему массиву. Так вот нужно держать указатель на правую границу, который нужно увеличивать при переходе к очередной цифре.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение длинных чисел в Pascal SeRhy Помощь студентам 2 04.12.2008 23:50
Умножение длинных чисел SeRhy Помощь студентам 1 28.11.2008 20:04
умножение 16-разрядных чисел deeeman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 12.12.2007 13:26
сложение огромных чисел H_T_V Паскаль, Turbo Pascal, PascalABC.NET 6 18.12.2006 08:14