Возведение в степень
http://acm.pku.edu.cn/JudgeOnline/problem?id=1001

Пример решения на 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;
}