p1962.pas

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 114 行

PAS
114
字号
PROGRAM p1962;

TYPE
	BigNum=array[0..110]of Integer;

CONST
	maxn=481;

VAR
	data				:array[1..maxn]of BigNum;
	a,b				:BigNum;

PROCEDURE MakeData;
var
	i,j,temp			:Integer;
begin
fillchar(data,sizeof(data),0);
data[1][0]:=1;
data[1][1]:=1;
data[2][0]:=1;
data[2][1]:=2;
for i:=3 to maxn do
begin
temp:=0;
for j:=1 to data[i-1][0] do
begin
temp:=data[i-1][j]+data[i-2][j]+temp;
data[i][j]:=temp mod 10;
temp:=temp div 10;
end;
data[i][0]:=data[i-1][0];
while (temp>0) do
begin
inc(data[i][0]);
data[i][data[i][0]]:=temp mod 10;
temp:=temp div 10;
end;
end;
end;

PROCEDURE Readin;
var
	ch				:Char;
begin
read(ch);
a[0]:=0;
while (ch<>' ') do
begin
inc(a[0]);
a[a[0]]:=ord(ch)-48;
read(ch);
end;
b[0]:=0;
repeat
read(ch);
inc(b[0]);
b[b[0]]:=ord(ch)-48;
until eoln ;
readln;
if (a[1]=0)and(b[1]=0) then halt;
end;

FUNCTION comp(var s,t:BigNum):Integer;
var
	l			:Integer;
begin
if s[0]<t[0] then comp:=-1 else
if s[0]>t[0] then comp:=1 else
begin
l:=s[0];
while (l>0)and(s[l]=t[l]) do dec(l);
if l=0 then comp:=0 else
if s[l]>t[l] then comp:=1 else
comp:=-1;
end;
end;

PROCEDURE change(var t:BigNum);
var
        i,temp                          :Integer;
begin
for i:=1 to t[0] div 2 do
begin
temp:=t[i];
t[i]:=t[t[0]-i+1];
t[t[0]-i+1]:=temp;
end;
end;

PROCEDURE Main;
var
	ansa,ansb			:Longint;
begin
change(a);
change(b);
ansa:=1;
while (comp(data[ansa],a)<0) do inc(ansa);
ansb:=ansa;
while (comp(data[ansb],b)<=0) do inc(ansb);
if ansb-ansa>0 then writeln(ansb-ansa)
        else writeln(0);
end;

BEGIN
//assign(input,'p.in');
//reset(input);
MakeData;
while true do
begin
Readin;
Main;
end;
END.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?