|
|
вернуться в форумWhy Access Violation? Послано ILTK! 23 июл 2004 11:36 program d1013; {$APPTYPE CONSOLE} type longnum=array[1..3000] of longint; function getlen(num:longnum):longint; var i:longint; begin i:=3000; while (i>=1) do if (num[i]=0) then dec(i) else break; getlen:=i; end; function sum(num1,num2:longnum):longnum; var h,i,l1,l2,ost:longint; begin l1:=getlen(num1); l2:=getlen(num2); ost:=0; if l1>l2 then begin for i:=1 to l1 do begin h:=num1[i]; num1[i]:=(num1[i]+num2[i]+ost) mod 10; ost:=(h+num2[i]+ost) div 10; end; num1[l1+1]:=num1[l1+1]+ost; sum:=num1; end else begin for i:=1 to l2 do begin h:=num2[i]; num2[i]:=(num2[i]+num1[i]+ost) mod 10; ost:=(h+num1[i]+ost) div 10; end; num2[l2+1]:=num2[l2+1]+ost; sum:=num2; end; end; function mul(k:longint; num:longnum):longnum; var h,ost,l1,i:longint; begin l1:=getlen(num); ost:=0; for i:=1 to l1 do begin h:=num[i]; num[i]:=(num[i]*k+ost) mod 10; ost:=(h*k+ost) div 10; end; num[l1+1]:=ost; mul:=num; end; var n,k,i:longint; work1,work2,work3,work:longnum; begin readln(n,k); if (n<2) or (k<2) then halt; if k>10 then begin i:=n; n:=k; k:=i; end; { if k=1 then begin write(0); end;} fillchar(work1,sizeof(work1),0); fillchar(work2,sizeof(work2),0); fillchar(work3,sizeof(work3),0); work1[1]:=k mod 10; work1[2]:=k div 10; work2[1]:=((k-1)*(k+1))mod 10; work2[2]:=((k-1)*(k+1))div 10; for i:=3 to n-1 do begin work3:=mul((k-1),sum(work1,work2)); work1:=work2; work2:=work3; end; fillchar(work,sizeof(work),0); if n>3 then begin work:=mul(k-1,work3); end else if n=3 then work:=mul(k-1,work2) else work:=mul(k-1,work1); k:=getlen(work); for i:= k downto 1 do write(work[i]); end. Re: Why Access Violation? Thank you for help. I understand my mistake. |
|
|