Другие языки программирования и технологии
Delphi Как сложить два очень больших числа?
Числа состоят более чем из 200 цифр менее 255... Т.е. E200 < х < E255... Они записаны строками... Нужен верный, рабочий алгоритм в виде функции, которая возращает строку... Function sum(string1,string2:string):string; var x,i,z:intege... ... begin ... result:=string3; end; Заранее спасибо...
А если просто в столбик посчитать.. .
Ну я иммю ввиду программу, которая будет
считать в столбик.. .
Мы получим самый быстрый способ сложения
чисел неограниченного размера.. .
Ограничения конечно есть.. . Это размер самого винчестера.. .
Python например считает до Гуглиона.. .
Это число со 100 нулями.. .
А алгоритм - 3-и массива.. . и обычное сложение
с переносом.. . Это для строк.. .
Можно конечно и перевести число из строкового представления
в 16-и ричный вид.. . но на это уйдет много машинного времени.. .
А для ускорения сложения строк можно воспользоваться
таблицей.. . Скорость будет еще выше.. . Остануться только
операции сравнения.. .
Ну я иммю ввиду программу, которая будет
считать в столбик.. .
Мы получим самый быстрый способ сложения
чисел неограниченного размера.. .
Ограничения конечно есть.. . Это размер самого винчестера.. .
Python например считает до Гуглиона.. .
Это число со 100 нулями.. .
А алгоритм - 3-и массива.. . и обычное сложение
с переносом.. . Это для строк.. .
Можно конечно и перевести число из строкового представления
в 16-и ричный вид.. . но на это уйдет много машинного времени.. .
А для ускорения сложения строк можно воспользоваться
таблицей.. . Скорость будет еще выше.. . Остануться только
операции сравнения.. .
Вот код: в простом паскале получаем числа до 510 цифр!
Подделать под Дельфи труда не составит.
type
BigNum = array [0..255] of Byte; { до 256 цифр по 2 на ячейку }
procedure OutNum(N : BigNum);
var
S : String;
R : Byte;
begin
S := '';
for R := 255 downto 0 do
if Not((N[R] = 0) and (S = '')) then
S := S + IntToStr(N[R] div 10) + IntToStr(N[R] mod 10);
if S = '' then S := '0' else if S[1] = '0' then Delete(S, 1, 1);
WriteLn(S);
end;
var
N1, N2 : BigNum;
R : Byte;
Perenos : Word;
Perepolnenie : Boolean;
begin
{ обнуляем числа }
for R := 0 to 255 do begin N1[R] := 0; N2[R] := 0; end;
{ в N2 заносим 1 }
N2[0] := 1;
{ строим последовательность чисел Фибоначчи }
OutNum(N1);
Perepolnenie := False;
repeat
OutNum(N2);
Perenos := 0;
for R := 0 to 255 do
begin
Perenos := Perenos + N1[R] + N2[R];
N1[R] := N2[R];
N2[R] := Perenos mod 100;
Perenos := Perenos div 100;
end;
Perepolnenie := (Perenos > 0);
until Perepolnenie;
end.
Подделать под Дельфи труда не составит.
type
BigNum = array [0..255] of Byte; { до 256 цифр по 2 на ячейку }
procedure OutNum(N : BigNum);
var
S : String;
R : Byte;
begin
S := '';
for R := 255 downto 0 do
if Not((N[R] = 0) and (S = '')) then
S := S + IntToStr(N[R] div 10) + IntToStr(N[R] mod 10);
if S = '' then S := '0' else if S[1] = '0' then Delete(S, 1, 1);
WriteLn(S);
end;
var
N1, N2 : BigNum;
R : Byte;
Perenos : Word;
Perepolnenie : Boolean;
begin
{ обнуляем числа }
for R := 0 to 255 do begin N1[R] := 0; N2[R] := 0; end;
{ в N2 заносим 1 }
N2[0] := 1;
{ строим последовательность чисел Фибоначчи }
OutNum(N1);
Perepolnenie := False;
repeat
OutNum(N2);
Perenos := 0;
for R := 0 to 255 do
begin
Perenos := Perenos + N1[R] + N2[R];
N1[R] := N2[R];
N2[R] := Perenos mod 100;
Perenos := Perenos div 100;
end;
Perepolnenie := (Perenos > 0);
until Perepolnenie;
end.
Похожие вопросы
- Требуется калькулятор для очень больших чисел, очень больших. Есть такой?
- Вычисления с очень большими числами (+)
- C++ long double большие числа при умножении искажаются
- Паскаль ДОЛГО считывает КОД с большими числами
- Паскаль. Цикл While. Определить остаток от деления большего числа а на меньшее число b, не используя стандартные функции
- как сосчитать остаток от деления больших чисел??
- как посчитать 365! (С++) Нужен алгоритм вычисления факториала больших чисел.
- добрый вечер, мне для привлечения большего числа клиентов в моей работе нужно создать свой сайт и продвигать его
- Как сравнивать большие числа? Например что больше! 52 или 10^46
- Факториалы больших чисел и действия с ними