|
|
back to boardCommon BoardTo xyz: I'm really sorry, but could you find another test case? 0909 is working. Here's my new code(Problem 1165) 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 Re: To xyz: I'm really sorry, but could you find another test case? 0909 is working. Here's my new code(Problem 1165) Input 99 Output 169 |
|
|