Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Как работать в Делфи с очень большими числами   Найти похожие ветки 

 
voron   (2004-10-23 00:05) [0]

У меня возникла проблема, может кто-то и подскажет:
Как работать с очень большими целыми числами (порядка 200-300 цифр)?? (Int64 не подходит)
Более конкретно: например мне нужно возвести  3 в степень 345, а из результата взять mod 5!


 
palva ©   (2004-10-23 00:12) [1]

Использовать какую-нибудь библиотеку. Наверняка их много. Только брать 32-разрядную версию.


 
GuAV ©   (2004-10-23 01:29) [2]

voron   (23.10.04 0:05)
возвести  3 в степень 345, а из результата взять mod 5


procedure TForm1.Button3Click(Sender: TObject);
var I, R: Integer;
begin
 R:=1;
 for I:=1 to 345 do
 begin
   R:=R*3;
   R:=R mod 5;
 end;
 ShowMessageFmt("R = %d",[R]);
end;


:)


 
Grundic ©   (2004-10-23 01:37) [3]


> GuAV
  R:=R*3;
  R:=R mod 5;

? :/
Я в таком состоянии в математике не силен. Можно пояснить?
Это не притенции - честно-честно. :) Просто интересно...
ЗЫ: прям рифма! (:


 
Megabyte ©   (2004-10-23 01:39) [4]

Я как-то факториал 100! считал, использовал массивы.


 
GuAV ©   (2004-10-23 01:44) [5]

Упс... я факториал не заметил во как:
procedure TForm1.Button3Click(Sender: TObject);
var I, R: Integer;
begin
 R:=1;
 for I:=1 to 345 do
 begin
   R:=R*3;
   R:=R mod 5*4*3*2*1;
 end;
 ShowMessageFmt("R = %d",[R]);
end;


 
GuAV ©   (2004-10-23 01:45) [6]

Grundic ©   (23.10.04 1:37) [3]
Можно пояснить?

Можно сразу делать mod т.к. старшие разряды не влияют на младшие при умножении :)


 
XProger ©   (2004-10-23 04:53) [7]

Сложение, умножение и деление столбиком, как во втором классе.
Или забыл? ;)

Длинная арифметика называется...


 
Defunct ©   (2004-10-23 05:17) [8]

> GuAV ©   (23.10.04 01:44) [5]

LOL

Результат этой функции R=72 всегда, независимо от кол-ва итераций ;>


 
Defunct ©   (2004-10-23 05:19) [9]

> GuAV ©   (23.10.04 01:44) [5]

Полагаю имелось в виду:

procedure TForm1.Button1Click(Sender: TObject);
var I, R: Integer;
begin
R:=1;
for I:=1 to 346 do
begin
  R:=R*3;
  R:= R mod (5*4*3*2*1);
end;
R := R mod 5;
ShowMessageFmt("R = %d",[R]);
end;


 
GuAV ©   (2004-10-23 13:21) [10]

Defunct ©   (23.10.04 5:19) [9]
Да, Вы правы.


 
Vasya.ru   (2004-10-23 13:26) [11]

voron   (23.10.04 0:05)
Поищи в интернете или библиотеке материалы по длинной арифметике - работа с большими числами через массивы - там не сложно, часа за 2 во всем разберешся


 
TUser ©   (2004-10-23 13:33) [12]

На алголисте полно материалов по этому делу, и на форуме там длинные числа - очень популярная тема


 
voron   (2004-10-23 13:40) [13]

Большое спасибо за советы!!!
Все получилось!



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
14-1098180650
miwa
2004-10-19 14:10
2004.11.07
Как я защищался или Зачем нужно заочное образование.


14-1098286900
Profi
2004-10-20 19:41
2004.11.07
Помогите решить


1-1098777268
BaDeVlad
2004-10-26 11:54
2004.11.07
Как обрезать WMF?


3-1097329515
Pashkerton
2004-10-09 17:45
2004.11.07
Выборка из временной таблицы


3-1097218453
Dush
2004-10-08 10:54
2004.11.07
Активные подключения к базе