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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2016, 23:17   #41
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Функции конечно хорошо, но эти ужасные лишние преобразования из строки в массив и обратно с использованием глобального массива.
Код:
var
  fi, fo: text;
  i, j, n, c, b: longint;
  s: string;
  p: array [1 .. 105] of byte;
  len: integer;

begin
  Assign(fi, 'sequence.in');
  Assign(fo, 'sequence.out');
  Reset(fi);
  Rewrite(fo);
  Read(fi, s);
  n := length(s);
  p[1] := 1;
  len := 1;
  for i := 1 to n do
  begin
    b := ord(s[i]) - ord('0') + 1;
    c := 0;
    for j := 1 to len do
    begin
      p[j] := c + p[j] * b;
      c := p[j] div 10;
      p[j] := p[j] mod 10;
    end;
    while c > 0 do
    begin
      inc(len);
      p[len] := c mod 10;
      c := c div 10;
    end;
  end;
  for i := len downto 1 do
    Write(fo, p[i]);
  Close(fo);
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.02.2016, 23:25   #42
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Функции конечно хорошо, но эти ужасные лишние преобразования из строки в массив и обратно с использованием глобального массива.
Код:
var
  fi, fo: text;
  i, j, n, c, b: longint;
  s: string;
  p: array [1 .. 105] of byte;
  len: integer;

begin
  Assign(fi, 'sequence.in');
  Assign(fo, 'sequence.out');
  Reset(fi);
  Rewrite(fo);
  Read(fi, s);
  n := length(s);
  p[1] := 1;
  len := 1;
  for i := 1 to n do
  begin
    b := ord(s[i]) - ord('0') + 1;
    c := 0;
    for j := 1 to len do
    begin
      p[j] := c + p[j] * b;
      c := p[j] div 10;
      p[j] := p[j] mod 10;
    end;
    while c > 0 do
    begin
      inc(len);
      p[len] := c mod 10;
      c := c div 10;
    end;
  end;
  for i := len downto 1 do
    Write(fo, p[i]);
  Close(fo);
end.
Спасибо огромное, сдал таки.
dimon_snake вне форума Ответить с цитированием
Старый 01.02.2016, 23:27   #43
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А какой смысл в этой сдаче, если все чужое?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.02.2016, 23:59   #44
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А какой смысл в этой сдаче, если все чужое?
Ну не знаю, учусь еще. Так хоть пойму, как работать с долгой арифметикой.
dimon_snake вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как уменьшить время работы программы 22hope22 C# (си шарп) 9 26.05.2013 21:41
VS 2010 - как поменять текст у кнопки во время работы программы, из .cpp файла? MrRockchip Общие вопросы C/C++ 3 21.02.2011 22:44
Как сократить время выполнения макроса? Алексей11111 Microsoft Office Excel 11 01.12.2009 20:04
Как узнать время работы программы в паскаль? bullvinkle Помощь студентам 2 26.12.2008 11:20
Как сократить время? МАКРОС! jungo Microsoft Office Excel 17 01.05.2008 12:13