Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Pascal: факториал очен большого числа 
:(
    Опции темы
laila
Дата 10.12.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Пожалуйста, помогите переделать программу из суммы очен длинных чисел для факториала. Теоритически понимаю как программа должна работать, но практически написать никак не могу..  smile  Понимаю как из типа string  каждый элемент перевести в integer, а вот с основными действиями-умножением проблемы.. вкладываю программу с суммой, please, помогите кто-нибудь smile 

Код


program suma;
const lmax = 1000;
type cislo = array[0..lmax] of byte;


function asciitodec(inputstr:string; var a:cislo): integer;
var i,j: longint;
    digit: byte;
begin
    asciitodec := 0;
    j := lmax;
    if length(inputstr) <= lmax then 
        for i := length(inputstr) downto 1 do 
        begin
            digit := ord(inputstr[i]) - ord('0');
            
            if (digit < 0) or (digit > 9) then asciitodec := -1
            else a[j] := digit;
            dec(j); 
        end
    else asciitodec := -2;
end;


procedure init(var a:cislo);
var i: longint;
begin
    for i := 0 to lmax do a[i]:=0;
end;

procedure print(a: cislo);
var i: longint;
    beg: boolean;
begin
    beg := false;
    for i := 0 to lmax do
    begin
        if (not beg) and (a[i] <> 0) then
        begin
            beg := true;
        end;

        if beg then write(a[i]);
    end;
    writeln('');
end;

function sum(a:cislo; b:cislo):cislo;
var i: longint;
    pamiat: byte;
    c:cislo;
begin
    init(sum);

    pamiat := 0;
    for i := lmax downto 0 do
    begin
        sum[i] := (pamiat + a[i] + b[i]) mod 10;
        pamiat := (pamiat + a[i] + b[i]) div 10;
    end;
end;

var tmp: string;
    a,b: cislo;
    c: char;
begin
    init(a);
    init(b);
    readln(tmp);
    asciitodec(tmp,a);
    readln(tmp);
    asciitodec(tmp,b);
    print(sum(a,b));
    readln();
end.

PM MAIL   Вверх
volvo877
Дата 10.12.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Посмотри присоединенную программу - там реализованы все операции с длинными числами, включая и вычисление факториалов (что и делается как пример использования)...

Присоединённый файл ( Кол-во скачиваний: 62 )
Присоединённый файл  BIG_INT.PAS 5,97 Kb
PM MAIL   Вверх
laila
Дата 10.12.2007, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Большое спасибо за помощь  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0836 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.