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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2016, 15:12   #31
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
var
  fi, fo: text;
  i, n, p: longint;
  s: string;

begin
  Assign(fi, 'sequence.in');
  Assign(fo, 'sequence.out');
  Reset(fi);
  Rewrite(fo);
  Read(fi, s);
  n := length(s);
  p := 1;
  for i := 1 to n do
    p := p * (ord(s[i]) - ord('0') + 1);
  Write(fo, p);
  Close(fo);
end.
Но longint не хватит для 10^100, так что придется реализовывать длинную арифметику.
Да, спасибо, работает, но не полностью. С более большими числами идет неправильный ответ, но вплоть до двадцатого теста нет проблем с ошибками, типа долгого выполнения программы или не влезания.
но с большими числами что-то не то.
dimon_snake вне форума Ответить с цитированием
Старый 31.01.2016, 15:16   #32
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
дык и я тебе про тож втираю.
смотри, чо нашёл.
Что это? Открыл паскалем, какая-то длинная программа в 450 строк.
dimon_snake вне форума Ответить с цитированием
Старый 31.01.2016, 15:17   #33
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
С более большими числами идет неправильный ответ
дык написали же - целочисленную арифметику нужно для подсчета реализовать. Результат не уместится ни в longint, ни в int64
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.01.2016, 15:19   #34
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
дык написали же - целочисленную арифметику нужно для подсчета реализовать. Результат не уместится ни в longint, ни в int64
И как это сделать? Не очень понимаю.
dimon_snake вне форума Ответить с цитированием
Старый 31.01.2016, 15:22   #35
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Погугли длинная арифметика паскаль. Тебе там умножение придется использовать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.01.2016, 16:13   #36
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Погугли длинная арифметика паскаль. Тебе там умножение придется использовать
Так, скорее всего, должно получится. Только связать не могу.
Вот, что получилось:
Код:
var
fi,fo:text;
i,n,x:longint;
y:longint;
s:string;
a:array[0..105] of integer;
procedure LongArif(b:integer;s1:string);
var i,c:integer;
s2:string;
begin
c:=0;
a[0]:=length(s);
for i:=1 to a[0] do a[a[0]-i+1]:=ord(s1[i])-48;
for i:=1 to a[0] do
 begin
   a[i]:=c+a[i]*b;
   c:=a[i] div 10;
   a[i]:=a[i] mod 10;
 end;
while c>0 do
  begin
    a[0]:=a[0]+1;
    a[a[0]]:=c mod 10;
    c:=c div 10;
    for i:=a[0] downto 1 do 
      begin
        s2:='';
        Str(a[i],s2);
        s:=s+s2;
        Inc(x);
      end;
  end;
end;
begin
Assign(fi,'sequence.in');
Assign(fo,'sequence.out');
Reset(fi);
Rewrite(fo);
Read(fi,s);
n:=length(s);
y:=1;
for i:=1 to n do
  begin
    LongArif(y,s);
    if i = n then
    for x:=n downto 1 do Write(fo,a[x]);
  end;
Write(fo,y);
Close(fo);
end.
Но что-то явно не так.
dimon_snake вне форума Ответить с цитированием
Старый 31.01.2016, 16:16   #37
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Погугли длинная арифметика паскаль. Тебе там умножение придется использовать
Да нагуглил я ему уже всё, да прицепил к посту #30.
1хрен, не понимает.
Цитата:
Что это? Открыл паскалем, какая-то длинная программа в 450 строк.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.01.2016, 19:58   #38
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А BDA молодец, придумал формулу. Интересно, методом тыка или обоснование и хоть какое-то доказательство есть? Жаль плюсануть не могу, движок запрещает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.02.2016, 10:51   #39
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Аватар, сначала решил написать систему уравнений для N:
N=a
a1+a2=a
a1+a2=a
Получилось вариантов выбора a+1.

N=ab
a1b1+a2b2=ab
a1+b1+a2+b2=a+b
Переписал первое уравнение в виде 10a1+b1+10a2+b2=10a+b, вычел второе, сократил на 9 и получил a1+a2=a. Вычел из второго получившееся.
a1+a2=a
b1+b2=b
Теперь вариантов (a+1)*(b+1).

Для N=abc так сделать не смог, но предположив закономерность, проверил её уже сравнением с полным перебором
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.02.2016, 22:26   #40
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Народ, можете помочь слепить из куска кода BDA с формулой, слепить с длинной арифметикой циклом.
То есть
Код:
for i:=1 to n do begin
y:=(ord(s[i])-ord('0')+1);
LongArif(y,s);
if i=n then for x:=n downto 1 to Write(fo,s[x]);
end;
При этом процедура LongArif :
Код:
procedure LongArif(b:integer;s1:string);
var i,c:integer;
s2:string;
begin
c:=0;
a[0]:=length(s1);
for i:=1 to a[0] do
a[a[0]-i+1]:=ord(s1[i])-48;
for i:=1 to a[0] do begin
a[i]:=c_a[i]*b;
c:=a[i]div 10;
a[i]:=a[i] mod 10;
end;
while c>0 do 
begin
a[0]:=a[o]+1;
a[a[0]]:=c mod 10;
c:=c div 10;
s:='';
for i:=a[0] downto 1 do begin
s2:='';
Str(a[i],s2);\\превращаем каждый символ полученного числа в строку
s:=s+s2;\\Добавляем к основной строке, пока не заполним ее
end;
end;
end;
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