Отримання знань
дистанційна підтримка освіти школярів
Входные данные
Выходные данные
Пример входных данных
Пример выходных данных
Анализ условия и обсуждение идеи решения
Пример решения на Pascal:
const ss = 1e7;
maxl = 7;
limit = 50;
type integer = longint;
arr = array[1..limit] of comp;
node = object
g: arr;
l: integer;
procedure mult(d: node);
end;
var a, b: node;
f: arr;
n, point: integer;
procedure node.mult(d: node);
var i, j: integer;
tmp: comp;
begin
fillchar(f, sizeof(f), 0);
for i := 1 to l do
for j := 1 to d.l do
f[i + j - 1] := f[i + j - 1] + g[i] * d.g[j];
g := f; l := l + d.l - 1;
tmp := 0;
for i := 1 to l do begin
g[i] := g[i] + tmp;
tmp := int(g[i] / ss);
g[i] := g[i] - tmp * ss;
end;
if tmp > 0 then begin
inc(l);
g[l] := tmp;
end;
end;
procedure updata;
var tmp: comp;
ch: char;
i: integer;
begin
tmp := 0; point := 0;
for i := 1 to 6 do begin
read(ch);
if ch = '.' then point := 6 - i
else tmp := tmp * 10 + ord(ch) - ord('0');
end;
fillchar(a, sizeof(a), 0);
a.l := 1; a.g[1] := tmp;
readln(n);
end;
procedure main;
var i: integer;
begin
b := a;
for i := 1 to n - 1 do
a.mult(b);
end;
procedure print;
var now, i: integer;
s, st: ansistring;
begin
point := point * n;
now := (a.l - 1) * maxl + trunc(ln(a.g[a.l]) / ln(10)) + 1;
str(a.g[a.l]:0:0, st);
for i := a.l - 1 downto 1 do begin
str(a.g[i]:0:0, s);
while length(s) < maxl do s := '0' + s;
st := st + s;
end;
while (point > 0) and (now > 0) and (st[now] = '0') do begin
point := point - 1;
now := now - 1;
delete(st, now + 1, 1);
end;
while now < point do begin
st := '0' + st;
inc(now);
end;
for i := 1 to now do begin
if now - i + 1 = point then write('.');
write(st[i]);
end;
writeln;
end;
begin
while not eof do begin
updata;
main;
print;
end;
end.
Пример решения на С++:
#include "stdio.h"
#include "string.h"
#define MAX 200
void power(int *a, int base, int n)
{
int i, j, set=0;
memset(a, 0, sizeof(int)*MAX);
for(i=0,j=base; i < MAX; i++,j=j/10)
a[i] = j%10;
for(i=0; i < n-1; i++)
{
j=0;
for(j=0; j < MAX; j++)
{
set = a[j]*base + set;
a[j] = set%10;
set = set/10;
}
}
}int main()
{
char s[MAX];
int a[MAX];
int n, i, base, len, k;
while(scanf("%s%d",&s,&n)==2)
{
base = 0;
len = strlen(s);
for(i=0; i < len; i++)
{
if(s[i]=='.')
{
k = 6-(i+1);
continue;
}
base = base*10 + s[i]-'0';
}
for(i=5; s[i]=='0'; i--,k--)
base = base/10;
k = k*n;
power(a, base, n);
for(i=MAX-1; i >= 0; i--)
{
if(a[i] == 0)
continue;
else
break;
}
if(k > i)
{
printf(".");
for(i=k-1; i >= 0; i--)
printf("%d", a[i]);
}
else
{
for(; i >= k; i--)
printf("%d", a[i]);
if(k!=0)
printf(".");
for(; i >= 0; i--)
printf("%d", a[i]);
}
printf("\n");
}
return 0;
}
Попередня | Зміст | Наступна |