Написать программу на pascal.Условие Пусть имеется неотрицательное целое число, представленное в виде массива своих цифр. Требу
Написать программу на pascal. Условие Пусть имеется неотрицательное целое число, представленное в виде массива своих цифр. Требуется возвести его в некоторую заданную степень.
Формат входного файла Первая строка входного файла "input.txt" представляет собой десятичную запись длинного целого числа A. Следующая строка содержит показатель степени n, в которую необходимо возвести указанное число.
Формат выходного файла Выходной файл "output.txt" должен содержать результат возведения в степень, представленный в десятичной системе счисления.
Ограничения 0≤A≤10 в 50 степени, 0 Примеры тестов Входной файл (input.txt) 1) 10203756485819806252197658031528043601970 2
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
// первая строка чисел в массив 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;
// вторая строка чисел в массив 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]>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;