Неверов Евгений Викторович
Меню сайта
Категории раздела
Программирование на языке Паскаль [27]
В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ
Программирование на Delphi [18]
В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi
Программирование на HTML [0]
В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML
Прочее [0]
Свободная тематика
Мини-чат
200
Наш опрос
Сколько Вам лет?
Всего ответов: 55
Статистика

Рейтинг@Mail.ru
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Программирование на языке Паскаль [ Добавить статью ]

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

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


function SlozhenieChisel(chislo1, chislo2: string): string;
var i, dlina: integer;
    p: array of byte;
begin
   dlina:=Length(chislo1);
   If Length(chislo2)>dlina then
      dlina:=Length(chislo2)+1 else
      dlina:=dlina+1;
   While Length(chislo1)<dlina do
      Insert('0', chislo1, 1);
   While Length(chislo2)<dlina do
      Insert('0', chislo2, 1);
   SetLength(p, dlina);
   Result:='';
   For i:=0 to dlina-1 do
      p[i]:=0;
   For i:=dlina downto 2 do
   begin
      p[i-1]:=p[i-1]+StrToInt(chislo1[i])+StrToInt(chislo2[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 dlina-1 do
      Result:=Result+IntToStr(p[i]);
   While (Result<>'') and (Result[1]='0') do
      Delete(Result, 1, 1);
end;

где

chislo1, chislo2 - исходные числа, записанные в строковом виде.

Например, SlozhenieChisel('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '15937635867208804532184593090188638399611880118944875270786'.


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


function UmnozhenieChisel(chislo1, chislo2: string): string;
var i1, i2: integer;
    s: string;
    p: array of byte;
begin
   SetLength(p, Length(chislo1)+Length(chislo2));
   Result:='';
   For i1:=Length(chislo1) downto 1 do
   begin
      s:='';
      For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
         p[i2]:=0;
      For i2:=Length(chislo2) downto 1 do
      begin
         p[i1+i2-1]:=p[i1+i2-1]+StrToInt(chislo1[i1])*StrToInt(chislo2[i2]);
         If p[i1+i2-1]>=10 then
         begin
            p[i1+i2-2]:=p[i1+i2-1] div 10;
            p[i1+i2-1]:=p[i1+i2-1] mod 10;
         end;
      end;
      For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
         s:=s+IntToStr(p[i2]);
      While (s<>'') and (s[1]='0') do
         Delete(s, 1, 1);
      Result:=SlozhenieChisel(Result, s);
   end;
end;

где

chislo1, chislo2 - исходные числа, записанные в строковом виде.

Например, UmnozhenieChisel('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '61413555618374748849977845610399844217660687681909351978534411248705150246948702748286484885796873132969976079507549'.

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

Категория: Программирование на языке Паскаль | Добавил: newerow1989 (12.03.2016 11:35 )
Просмотров: 188 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Все смайлы
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Copyright MyCorp © 2018
    Автор этого сайта: Неверов Евгений Викторович

    Мои координаты
    Бесплатный конструктор сайтов - uCozЯндекс.Метрика