ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Common Board

To xyz: I'm really sorry, but could you find another test case? 0909 is working. Here's my new code
Posted by Michael_Rybak 20 Dec 2001 23:17
Program Subnumber;
Const MaxLen=300;
Var mt,dt:Array[0..100] Of Byte;
    st:Array[0..9,0..9] Of Byte;
Type TNum=Array[0..MaxLen] Of Byte;{0-sign of the number}
Procedure Add(A,B:TNum;Var C:TNum);   Forward;          {Сложение}
Procedure Sub(A,B:TNum;Var C:TNum);   Forward;
Procedure Mul10(Pow:Integer;Var X:TNum); Forward;          {Умножение
на 10 в степени}
Procedure Mulm10(Pow:Integer;Var X:TNum);Forward;
Procedure Mul(A,B:TNum;Var C:TNum);   Forward;          {Умножение}
Procedure MulC(A:TNum;C:Integer;Var B:TNum);Forward;       {Умножение
числа на цифру}
Procedure InputLong(Var X:TNum);      Forward;          {Ввод}
Procedure PrintLong(Var X:TNum);      Forward;          {Вывод}
Function Len(X:TNum):Integer;         Forward;          {Определение
длины}
Function CmpEqLns(A,B:TNum):Char;     Forward;          {Сравненме
чисел одной длины}
Function Cmp(A,B:TNum):Char;          Forward;          {Сравнение
чисел}
Procedure Dvd(A,B:TNum;Var C:TNum);   Forward;
Procedure InToTNum(K:Integer;Var R:TNum); Forward;
Procedure StToTNum(S:String;Var R:TNum);  Forward;
 Function Max(X,Y:Integer):Integer;
 Begin
  If X>Y Then Max:=X Else Max:=Y;
 End;
 Procedure Add;
  Var I,D,v                     :Integer;
 Begin
  D:=0;
  For I:=MaxLen DownTo 1 Do Begin
   v:=st[A[I],B[I]]+D;
   C[I]:=mt[v];
   D:=dt[v];
  End;
 End;
 Procedure Mul10;
  Var I:Integer;
 Begin
  For I:=1 To MaxLen-Pow Do
   X[I]:=X[I+Pow];
  For I:=MaxLen+1-Pow To MaxLen Do
   X[I]:=0;
 End;
 Procedure Mulm10;
  Var I:Integer;
 Begin
  For I:=MaxLen DownTo Pow+1 Do
   X[I]:=X[I-Pow];
  For I:=1 To Pow Do
   X[I]:=0;
 End;
 Procedure Mul;
  Var I,J,D                  :Integer;
      T                      :TNum;
 Begin
  For I:=1 To MaxLen Do C[I]:=0;
  For I:=MaxLen DownTo MaxLen+1-Len(B) Do Begin
   For J:=1 To MaxLen Do T[J]:=0;
   D:=0;
   For J:=MaxLen DownTo 1 Do Begin
    T[J]:=(A[J]*B[I]+D) Mod 10;
    D:=(A[J]*B[I]+D) Div 10;
   End;
   Mul10(MaxLen-I,T);
   Add(T,C,C);
  End;
 End;
 Procedure MulC;
  Var i,j,d:Integer;
      t:TNum;
 Begin
  For I:=1 To MaxLen Do B[I]:=0;
  For J:=1 To MaxLen Do T[J]:=0;
  D:=0;
  For J:=MaxLen DownTo MaxLen-Len(A) Do Begin
   T[J]:=(A[J]*C+D) Mod 10;
   D:=(A[J]*C+D) Div 10;
  End;
  Add(T,B,B);
 End;
 Procedure InputLong;
  Var I                      :Integer;
      S                      :String;
      Cod                    :Integer;
 Begin
  Readln(S);
  If S[1]='-' Then Begin
   X[0]:=1;
   Delete(S,1,1);
  End;
  For I:=1 To Length(S) Do Val(S[I],X[MaxLen-Length(S)+I],Cod);
 End;
 Procedure PrintLong;
  Var I                      :Integer;
 Begin
  If Len(X)=0 Then
   Write(0)
  Else
   For I:=MaxLen+1-Len(X) To MaxLen Do
    Writ