Неверов Евгений Викторович
QR-код
Меню сайта
Категории раздела
Программирование на языке Паскаль [26]
В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ
Программирование на Delphi [19]
В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi
Программирование на HTML [1]
В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML
Мои программы [1]
Описание разработанных автором программ.
Online-программы [2]
Прочее [42]
Свободная тематика
Мини-чат
200
Наш опрос
Существуют ли инопланетяне?
Всего ответов: 11
Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0

Сложение и умножение "длинных" чисел

1. Сложение "длинных" чисел

function NumberAdd(a, b: string): string;
var i, len: integer;
    p: array of byte;
begin
   if Length(a)>Length(b) then
      len:=Length(a)+1 else
      len:=Length(b)+1;
   while Length(a)<len do
      a:='0'+a;
   while Length(b)<len do
      b:='0'+b;
   SetLength(p, len);
   Result:='';
   for i:=0 to len-1 do
      p[i]:=0;
   for i:=len downto 2 do
   begin
      p[i-1]:=p[i-1]+StrToInt(a[i])+StrToInt(b[i]);
      if p[i-1]>=10 then
      begin
         p[i-2]:=p[i-1] div 10;
         p[i-1]:=p[i-1] mod 10;
      end;
   end;
   for i:=0 to len-1 do
      Result:=Result+IntToStr(p[i]);
   while (Result<>'') and (Result[1]='0') do
      Delete(Result, 1, 1);
end;

где:

  • a, b – исходные числа, записанные в строковом виде.

Например,

  • NumberAdd('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '15937635867208804532184593090188638399611880118944875270786';
  • NumberAdd('34215409462860781092', '833043077814022310693589842664') выведет '833043077848237720156450623756'.

2. Умножение "длинных" чисел

function NumberMul(a, b: string): string;
var i, j: integer;
    s: string;
    p: array of byte;
begin
   SetLength(p, Length(a)+Length(b));
   Result:='';
   for i:=Length(a) downto 1 do
   begin
      s:='';
      for j:=0 to Length(a)+Length(b)-1 do
         p[j]:=0;
      for j:=Length(b) downto 1 do
      begin
         p[i+j-1]:=p[i+j-1]+StrToInt(a[i])*StrToInt(b[j]);
         if p[i+j-1]>=10 then
         begin
            p[i+j-2]:=p[i+j-1] div 10;
            p[i+j-1]:=p[i+j-1] mod 10;
         end;
      end;
      for j:=0 to Length(a)+Length(b)-1 do
         s:=s+IntToStr(p[j]);
      while (s<>'') and (s[1]='0') do
         Delete(s, 1, 1);
      Result:=NumberAdd(Result, s);
   end;
end;

где:

  • a, b – исходные числа, записанные в строковом виде.

Например,

  • NumberMul('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '61413555618374748849977845610399844217660687681909351978534411248705150246948702748286484885796873132969976079507549';
  • NumberMul('990918900803979', '5885894591255388092880215') выведет '5832444198614874435652876143089242375485'.

Примечание. Функция NumberMul зависит от функции NumberAdd.

Категория: Программирование на языке Паскаль | Добавил: newerow1989 (12.03.2016)
Просмотров: 1064 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Код *:
Вход на сайт
Поиск
Друзья сайта
Заработок в Интернете
Для начала необходим Электронный PAYEER® кошелек!
Copyright MyCorp © 2025
Версия для мобильных устройств. Яндекс.Метрика Анализ сайта Проверить мой сайт на ScamAdviser.com