零
【问题描述】
零是个好数字啊。万物都是从0开始的,譬如说c语言的数组下标,你在世界上存在的天数啊等等等等,然后一个数xor它自己结果也是等于0的。根据惯例,我们的第一句话一定与题目无关的。
其实题目还是很简单,求出给出的若干个数的乘积末尾有多少个0。
【输入文件】
输入文件zero.in。第一行包含一个整数n,代表乘数的个数。接下来n行分别是n个正整数,行首行尾行中均不会有空格出现,出现找我算账。
【输出文件】
输出文件zero.out应包含一个正整数,为乘积末尾0的个数。
【样例输入】
3
357
96
35
【样例输出】
1
【数据规模】
对于20%的数据,乘积在int64范围内。
对于60%的数据,乘积不超过1000位。
对于100%的数据n≤1000,每个数的长度不大于1000,答案小于1000。
=============================
========================
type
arr=array[0..2000]of longint;
var
a,c:arr;
hash:array[1..5]of longint;
st:ansistring;
n:longint;
procedure init;
begin
assign(input,'zero.in');
assign(output,'zero.out');
reset(input); rewrite(output);
end;
procedure terminate;
begin
close(input); close(output);
halt;
end;
procedure chufa(a:arr;b:longint;var c:arr);
var
i:longint;
len:longint;
begin
fillchar(c,sizeof(c),0);
len:=a[0];
for i:=len downto 2 do
begin
c[i-1]:=c[i-1]+10*(a[i] mod b);
c[i]:=(c[i]+a[i]) div b;
end;
c[1]:=(c[1]+a[1]) div b;
while (c[len]=0)and(len>1) do dec(len);
c[0]:=len;
end;
procedure main;
var
i:longint;
j:longint;
begin
readln(n);
fillchar(hash,sizeof(hash),0);
for i:=1 to n do
begin
readln(st);
a[0]:=length(st);
for j:=1 to a[0] do a[j]:=ord(st[a[0]+1-j])-48;
while (a[0]<>0)and((a[1]=0)or(a[1] and 1=0)or(a[1] mod 5=0)) do
begin
if a[1]=0 then
begin
inc(hash[5]);
inc(hash[2]);
chufa(a,10,c);
a:=c;
end
else
begin
if a[1] and 1=0 then
begin
inc(hash[2]);
chufa(a,2,c);
a:=c;
end
else
if a[1] mod 5=0 then
begin
inc(hash[5]);
chufa(a,5,c);
a:=c;
end;
end;
end;
end;
if hash[5]>hash[2] then writeln(hash[2])
else writeln(hash[5]);
end;
begin
init;
main;
terminate;
end.