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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 22:43   #1
Imbire
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 3
По умолчанию возвести число x в степень y

требуется возвести число x в степень y (1<=x<=10; 1<=y<=1000), написала через цикл, но с большой степенью не выходит, как эту задачу иначе можно сделать?

Последний раз редактировалось Imbire; 30.10.2011 в 23:09.
Imbire вне форума Ответить с цитированием
Старый 30.10.2011, 23:08   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Imbire Посмотреть сообщение
1<=x<-10
Нету таких иксов.
Somebody вне форума Ответить с цитированием
Старый 30.10.2011, 23:10   #3
Imbire
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 3
По умолчанию

извините, опечаталась
Imbire вне форума Ответить с цитированием
Старый 30.10.2011, 23:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно взять вещественный тип данных.
например
Код:
var Stepen : extended;
 x, y : integer;
begin
   Stepen := 1;
   for i:=1 to y do Stepen := Stepen * x;
а ещё можно обойтись без циклов - используя логарифмическую функцию...

если ответ нужен в ЦЕЛЫХ числах, тогда задача сложнее - нужно реализовать длинную арифметику...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2011, 01:02   #5
Imbire
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 3
По умолчанию

нужен в целых) а где можно почитать про эту арифметику?что бы доступно было написано?
Imbire вне форума Ответить с цитированием
Старый 31.10.2011, 04:27   #6
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Imbire Посмотреть сообщение
а где можно почитать про эту арифметику?что бы доступно было написано?
А чего про нее читать? Это самая обычная арифметика..
Ты в каком классе учишься? Первый уже закончила? умеешь умножать/делить столбиком/уголком? Вот это и есть вся длинная арифметика, больше в ней ничего нет )). Так что надо не читать, а садиться и делать..

Но, поскольку тут длинная арифметика требуется только в очень усеченном варианте (только умножение и только на короткое число), то сделать это совсем просто.
Код:
{ short number to the power of short, which results into long number
  by TinMan, programmersforum.ru }

const
  LongLength= 1001;
  LongBase= 10;

type
  tNumber= array[1..LongLength] of byte;

procedure ProductLongByShort(var a: tNumber; b: byte);
var
  i,c: integer;
begin
  c:= 0;
  for i:=1 to LongLength do begin
    c:= a[i]*b+c;
    a[i]:= c mod LongBase;
    c:= c div LongBase
  end
end;

procedure PresetLong(var a: tNumber; b: longint);
var
  i: integer;
begin
  for i:=1 to LongLength do begin
    a[i]:= b mod LongBase;
    b:= b div LongBase
  end
end;

procedure ShowLong(a: tNumber);
var
  i: integer;
begin
  i:= LongLength;
  while (i>1) and (a[i]=0) do dec(i);
  for i:=i downto 1 do write(a[i])
end;

var
  i,x,y: integer;
  n: tNumber;

begin
  write('enter x and y: ');
  readln(x,y);
  PresetLong(n,1);
  for i:=1 to y do ProductLongByShort(n,x);
  ShowLong(n);
  readln
end.
Вот, как-то так.. Тут реализовано простое умножение в столбик, плюс процедура для перевода коротких чисел в длинные, а также печать длинных чисел. Из условия задачи следует, что длина (в десятичной системе) не может превышать 1001 знака. Названия процедур и переменных говорят сами за себя. Я также выделил основание в отдельную константу, так что при желании можно получить результат и в другой системе счисления - но это так, на всякий случай, поскольку это совсем другая песня..
Imbire, спрашивай, что неясно.
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 31.10.2011 в 04:49.
TinMan вне форума Ответить с цитированием
Старый 31.10.2011, 09:40   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

TinMan, браво!!!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
возвести в степень gylayko Помощь студентам 5 06.10.2011 18:09
Как возвести число в степень? Wintrymoon Паскаль, Turbo Pascal, PascalABC.NET 36 09.05.2011 15:11
как возвести в степень??? Yokka Свободное общение 4 24.03.2010 12:52
Возвести в степень b некоторое число a Михаил70 Общие вопросы Delphi 3 09.09.2009 16:10
как ВОЗВЕСТИ В СТЕПЕНЬ? Sova123456 Помощь студентам 2 14.05.2008 20:19