Написать программку на pascal.УсловиеПусть имеется неотрицательное целое число,

Написать программку на pascal.
Условие
Пусть имеется неотрицательное целое число, представленное в виде массива собственных цифр.
Требуется возвести его в некоторую заданную ступень.

Формат входного файла
1-ая строчка входного файла "input.txt" представляет собой десятичную запись длинноватого целого числа A.
Последующая строка содержит показатель ступени n, в которую нужно возвести обозначенное число.

Формат выходного файла
Выходной файл "output.txt" должен содержать итог возведения в ступень, представленный в десятичной системе счисления.

Ограничения
0A10 в 50 ступени, 0
Образцы тестов
Входной файл (input.txt)
1) 10203756485819806252197658031528043601970
2

2) 55786
17

Выходной файл (output.txt)
1) 104116646421909761950282879573175588809976767764774752111453905887721451787880900

2) 490827381405222212342433355512086149590506305271663102056527621790991920279453696

Задать свой вопрос
1 ответ
PROGRAM Power_Long;

var
    i:byte; // счетчик
    si, so:string; // числа в виде строк
    power:byte; //показатель ступени

function readFile(filename:string):string;
var f:text;
    s:string;
begin
  assign(f,filename);  Reset(f);
  readln(f,s);
  readln(f,power);
  close(f);  
  readFile := Trim(s);
end;

function multiplyLong(s1:string; s2:string):string;
var
    i,j,k,l:byte; //счетчики
    z:boolean; //
    A,B,T,R:array [0..100] of byte; //массивы
    carry:byte; //перенос при умножении и суммировании
    rt:string;//итог
begin

  // 1-ая строчка чисел в массив
  l:=Length(s1);
//  A := new byte[l+1];
  A[0]:=l; //количество
  for i:=l downto 1 do
    A[l-i+1]:=ord(s1[i]) - 48;

  // 2-ая строчка чисел в массив
  k:=Length(s2);
//  B := new byte[k+1];
  B[0]:=k; //количество
  for i:=k downto 1 do
    B[k-i+1]:=ord(s2[i]) - 48;
    
  i:=l+k; // 999*9999=9989001, т.е. максимум 7знаков
//  R := new byte[i+1]; //массив с результатом
  R[0]:=i;//количество
//  T := new byte[i+1];//temp - произведение A на один символ из B

  for i:=1 to A[0] do begin
    
    //T := умножение A на один знак из B
    carry:=0;
    for j:=1 to B[0] do begin
      k:= A[i] * B[j] + carry;
      carry := k div 10;
      T[j]:= k mod 10;
    end;
    j:=j+1;
    T[j]:=carry;
    T[0]:=j;
    
    // прибавление T к результату R
    carry:=0;
    for j:=1 to T[0] do begin
      k := T[j] + R[j+i-1] + carry;
      carry := k div 10;//перенос
      R[j+i-1] := k mod 10;
    end;
  end;

  rt:='';
  z:=false;//проверка на водящие нули
  for i:= R[0] downto 1 do begin
    if (R[i]gt;0) then begin
      rt := rt + R[i];
      z:=true;//все последущие нули надобно добавить в число
    end else
      if (R[i]=0) and z then
        rt := rt + R[i];
        
  end;
 
  multiplyLong := rt;
end;

BEGIN
  si := readFile('input.txt');
  so := multiplyLong(si, si); //построили во вторую ступень
 
  // строительство в ступень от 3 и выше умножением
  for i:=3 to power do begin
    so := multiplyLong(si, so);
  end;

  writeln( si, '^',power,' = ',so );
END.
Ольга Люлинцева
программа написана для PascalABC
Концыбкин Роман
но обязана идти и на TurboPascal
Виктория Пугасей
Чтоб вывести ответ в файл надобно в конце дописать
Степан Шихалеев
Assign(f,'output.txt'); ReWrite(f); Write(f, so); close(f);
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт