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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2014, 16:05   #1
Sonny01
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 49
По умолчанию возведение в степень числа в массиве.

Добрый день всем, помогите пожалуйста разобраться с проблемой.
необходимо возвести двойку в степень (в конечном итоге 2 в 512, например)
на выходе должен получиться массив который и будет длинным числом, в каждой ячейке хранится одна цифра от 0..9
возвожу умножением на 2 в столбик... но путаюсь с переносом разрядов...
начинаю умножение с массива, размер массива определяю по формуле: (log10 (2) * n) + 1 где n - степень в которую необходимо возвести, т.е. заранее определяю кол-во знаков будет в длинном числе и заполняю m[0] = 1; , все остальные нули (по умолчанию) и начинаю умножение в столбик.
спасибо.

Последний раз редактировалось Sonny01; 12.12.2014 в 16:10.
Sonny01 вне форума Ответить с цитированием
Старый 12.12.2014, 16:21   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Я даю готовые функции сложения и умножения чисел:
Код:
function slozhenie_chisel(chislo1, chislo2: string): string;
var i,dlina:integer;
    p:array of byte;
begin
{***********************************}
{                                   }
{ Сложение чисел: chislo1 + chislo2 }
{                                   }
{***********************************}
   dlina:=Length(chislo1);
   If Length(chislo2)>dlina then
      dlina:=Length(chislo2)+1 else
      dlina:=dlina+1;
   While Length(chislo1)<dlina do
      Insert('0',chislo1,1);
   While Length(chislo2)<dlina do
      Insert('0',chislo2,1);
   SetLength(p,dlina);
   Result:='';
   For i:=0 to dlina-1 do
      p[i]:=0;
   For i:=dlina downto 2 do
   begin
      p[i-1]:=p[i-1]+StrToInt(chislo1[i])+StrToInt(chislo2[i]);
      If p[i-1]>=10 then
      begin
         p[i-2]:=p[i-1] div 10;
         p[i-1]:=p[i-1] mod 10;
      end;
   end;
   For i:=0 to dlina-1 do
      Result:=Result+IntToStr(p[i]);
   While (Result<>'') and (Result[1]='0') do
      Delete(Result,1,1);
end;

function umnozhenie_chisel(chislo1, chislo2: string): string;
var i1,i2:integer;
    s:string;
    p:array of byte;
begin
{************************************}
{                                    }
{ Умножение чисел: chislo1 * chislo2 }
{                                    }
{************************************}
   SetLength(p,Length(chislo1)+Length(chislo2));
   Result:='';
   For i1:=Length(chislo1) downto 1 do
   begin
      s:='';
      For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
         p[i2]:=0;
      For i2:=Length(chislo2) downto 1 do
      begin
         p[i1+i2-1]:=p[i1+i2-1]+StrToInt(chislo1[i1])*StrToInt(chislo2[i2]);
         If p[i1+i2-1]>=10 then
         begin
            p[i1+i2-2]:=p[i1+i2-1] div 10;
            p[i1+i2-1]:=p[i1+i2-1] mod 10;
         end;
      end;
      For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
         s:=s+IntToStr(p[i2]);
      While (s<>'') and (s[1]='0') do
         Delete(s,1,1);
      Result:=slozhenie_chisel(Result,s);
   end;
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 12.12.2014 в 16:46.
newerow1989 вне форума Ответить с цитированием
Старый 12.12.2014, 16:46   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Вот специально для тебя:
Код:
function step2(n: integer): string;
var i,j:integer;
    p:array of byte;
begin
   SetLength(p,n);//размерность немного увеличена (осталось сосчитать точно!)
   Result:='';
   For i:=0 to n-2 do
      p[i]:=0;
   p[n-1]:=1;
   For i:=1 to n do
   begin
      For j:=0 to n-1 do
         p[j]:=p[j]*2;
      For j:=n-1 downto 1 do
         If p[j]>=10 then
         begin
            p[j-1]:=p[j-1]+p[j] div 10;
            p[j]:=p[j] mod 10;
         end;
   end;
   For i:=0 to n-1 do
      Result:=Result+IntToStr(p[i]);
   While (Result<>'') and (Result[1]='0') do
      Delete(Result,1,1);
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 12.12.2014, 16:54   #4
dkalex
Новичок
Джуниор
 
Регистрация: 12.12.2014
Сообщений: 1
По умолчанию

тут помогут http://studhelp.net/
dkalex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возведение в степень числа в Delphi Gallaxy Помощь студентам 4 14.09.2010 22:04
Возведение числа в степень Gross Общие вопросы Delphi 8 25.12.2008 19:37
Возведение числа в степень Roberto Помощь студентам 9 05.04.2008 09:50