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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2014, 16:34   #1
Энини
Новичок
Джуниор
 
Регистрация: 24.05.2014
Сообщений: 1
По умолчанию Вычисление факториала на Delphi (длинная арифметика)

Здравствуйте, пишу класс для очень-длинного-целого, по заданию: вычислить факториал введенного числа. Уже очень запуталась и пишу полную ерунду исходя из данных, полученных при трассировке, но что-то не понимаю, что уже нужно поменять, чтобы работало
Считает вроде все верно, по крайней мере при запросе до 10 (то бишь 10!), видимо, когда массив становится "двузначным числом", что-то идет не так.

Вот, собственно, код. Буду благодарна за любой намек

Код:
Function TBigInt.FactBI: string;              // VARIANT
var i, k, buf, nyaind: integer;
    nya : boolean;
begin
  Setlength(BII,1);  //массив для записи факториала
  Setlength(fBI,1); //массив изначально состоящий из единички, который в последствии будет увиеличиваться на 1
  fbi[0]:=0;
  biI[0]:=1;
  nya := false;
  nyaind := 0;
WHILE NOT NYA DO BEGIN
  buf := 0;
  For k := 0 to length(fbI)-1 do begin       //--------------
    For i := 0 to length(bIi)-1 do begin     //
      BII[i+k] := BII[i+k] + BII[i]*fbi[k];  //
      BII[i+k] := BII[i+k] + buf;            //
      If BII[i+k] > 9 then begin             //
        Setlength(Bii, length(BII)+length(fBI)); //
        buf := BII[i+k] div 10;              //
        BII[i+k] := BII[i+k] mod 10;         //
        If i=(length(BII)-2) then begin      //
          Setlength(Bii, length(BII)+1);     //
          BII[i+k+1] := buf;                 //
          buf := 0;                          //   Умножение
        end;                                 //
      end else                               //
        buf := 0;                            //
    end;                                     //
  end;                                       //---------------
  buf := fBI[0]+1;                           //---------------
  fBI[0] := buf mod 10;                      //
  buf := buf div 10;                         //
  i := 1;                                    //
  While (buf > 0) do begin                   //
    If i = length(fBI) then                  //
      Setlength(fBI, length(fBI)+1);         //
    buf := fBI[i] + buf;                     //    +1
    fBI[i] := buf mod 10;                    //
    buf := buf div 10;                       //
    inc(i);                                  //
  end;                                       //---------------
  If length(BI)=length(fBI) then begin       //---------------
    For i := 0 to length(BI)-1 do begin      //
      If BI[i]=fBI[i] then                   //
        inc(nyaind);                         //
    end;                                     //   Сравнение заданного массива с 
  If nyaind = length(fBI) then               // увеличивающимся на 1
    nya := true;                             //---------------
  end;
END;
Энини вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длинная арифметика Свитозар Помощь студентам 0 26.09.2012 19:07
Длинная арифметика на C++ Kingdom_Reborn Помощь студентам 0 06.04.2011 22:32
Длинная арифметика. Steam.dll Помощь студентам 8 03.04.2011 17:47
Delphi Длинная арифметика kat297 Помощь студентам 0 26.12.2010 23:10
Delphi Длинная арифметика kat297 Помощь студентам 8 22.10.2010 15:02