ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1013. K-ичные числа. Версия 3

Filippov Nickolas SSAU#2's AC program is HERE!
Послано Nickolas 14 фев 2003 19:48
program kbasednumbers;
 const max=500;
       osn=100000000;
 type big=array[0..max] of longint;
  var i:integer;
      a,b,c:big;
      n,k:word;

  procedure sumbig(var a,b,c:big);
   var k,i:word;
    begin
      FillChar(c,sizeof(c),0);
      if a[0]>=b[0] then k:=a[0] else k:=b[0];
      for i:=1 to k do begin
        c[i+1]:=(a[i]+b[i]+c[i]) div osn;
        c[i]:=(a[i]+b[i]+c[i]) mod osn;
      end;
      if c[k+1]<>0 then c[0]:=k+1 else c[0]:=k;
    end;

  procedure multbignum(var a:big; number:word);
   var k,i:word;
       um,um_temp:longint;
    begin
      um:=0;
      for i:=1 to a[0] do begin
        um_temp:=(um+a[i]*number) div osn;
        a[i]:=(um+a[i]*number) mod osn;
        um:=um_temp;
      end;
      if um<>0 then begin inc(a[0]); a[a[0]]:=um; end;
    end;

  procedure printbig(var a:big);
   var nosn:word;
       s:string;
    begin
      str(osn div 10,s);
      nosn:=length(s);
      write(a[a[0]]);
      for i:=a[0]-1 downto 1 do begin
        str(a[i],s);
        while length(s)<nosn do s:='0'+s;
        write(s);
      end;
    end;

begin
 read(n);
 read(k);
 a[0]:=1;
 a[1]:=1;
 b[0]:=1;
 b[1]:=k-1;
 for i:=2 to n do begin
   sumbig(a,b,c);
   multbignum(c,k-1);
   a:=b;
   b:=c;
 end;
 printbig(b);
end.