Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Задача на Паскале


Автор: Рыська 11.7.2005, 01:16
мне тут задали такую задачку... помогите плиз...
вывести на экран все числа десятичной записи числа 2^500 вот....

Автор: Ch0bits 11.7.2005, 01:51
Код

begin
Writeln('2^500=');
Writeln('3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376');
end.


MatLab рулит! smile

Автор: Snowy 11.7.2005, 12:28
Цитата
все числа десятичной записи числа 2^500

Это как? Число-то одно.
Может все цифры? Но тогда это 0123456789 smile

Автор: Рыська 11.7.2005, 15:05
Vadim999, хех спасибо я теперь знаю как оно целиком выглядит=))

Автор: dvs 11.7.2005, 15:53
Рыська, ты разобралась, что надо делать? Или алгоритм действий тебе рассказать?

Автор: Рыська 11.7.2005, 16:13
dvs15, помочь...=)

Автор: Mayk 11.7.2005, 16:30
Рыська
Если описывать в общих чертах, то
на алголисте есть http://algolist.manual.ru/maths/longnum.php.
А дальше просто. 2**500 = 2**(2**250) = 4**250 = 16**125. (где ** - возведение в степень).


Автор: Рыська 12.7.2005, 15:29
Помогите... кто может написать эту прогу... пожалуйста... денюжку заплачу... HELP!!!... а то ведь степендии лешусь...=((

Автор: Snowy 12.7.2005, 15:45
Так тебе нужно расчитать именно это число или все числа-степени от 2^2 до 2^500?

Автор: Рыська 12.7.2005, 16:24
нет только это...

Автор: Snowy 12.7.2005, 17:08
Хорошо, вот держи решение.
Накатал по такому принципу:
Получаемое число, которое явно не лезет в возможности дельфи.
Поэтому рассматриваем число, как массив одноциферных значений.
Писал на том уровне, чтобы похоже было на студента:
Код

var
  dig: array[1..255] of integer;
  s:   string;
  i,a: integer;

begin
  for i:=1 to 255 do dig[i]:=0;
  dig[1]:=2; // 2 в первой степени
  for i:=2 to 255 do  // считаем 2 от 2-й до 500-й степени
    for a:=499 downto 1 do // умножаем каждую цифру
    begin
      dig[a]:=dig[a]*2;
      if dig[a]>9 then
      begin
        dig[a]:=dig[a]-10;
        dig[a+1]:=dig[a+1]+1;
      end;
    end;
  s:='';
  a:=255;
  while dig[a]=0 do a:=a-1;
  for i:=1 to a do s:=chr(dig[i]+48)+s;
  WriteLn(s);
end.

Автор: Snowy 12.7.2005, 17:35
А можно обойтись и без стринга, а сделать в конце вместо
Код

  for i:=1 to a do s:=chr(dig[i]+48)+s;    
  WriteLn(s);

Код

  for i:=a downto 1 do Write(dig[i]);

Автор: Рыська 12.7.2005, 17:39
ааа уряяя=))) спасибо огромное...=))) *10 раз чмок*

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)