Написать программку на 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
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.
-
Вопросы ответы
Статьи
Информатика
Статьи
Разные вопросы.
Қазақ тiлi.
Английский язык.
Математика.
История.
Экономика.
Экономика.
Русский язык.
Разные вопросы.
Математика.