⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p1210.pas

📁 高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程
💻 PAS
字号:
PROGRAM p1210;

TYPE
        BigNum=array[0..100]of Longint;

VAR
        n                       :BigNum;
        total_2,total_5,total_10
                                :Integer;
        order                   :array[1..2,1..300]of BigNum;

PROCEDURE Print(var t:BigNum);
var
        i                       :Integer;
begin
for i:=t[0] downto 1 do write(t[i]);
end;

FUNCTION Mul(ans:BigNum;p:Integer):BigNum;
var
        temp,i                  :Integer;
begin
temp:=0;
for i:=1 to ans[0] do
        begin
        temp:=temp + ans[i] * p;
        ans[i]:=temp mod 10;
        temp:=temp div 10;
        end;
while (temp>0) do
        begin
        inc(ans[0]);
        ans[ans[0]]:=temp mod 10;
        temp:=temp div 10;
        end;
Mul:=ans;
end;

PROCEDURE Divp(var ans:BigNum;p:Integer);
var
        i,temp                          :Integer;
begin
temp:=0;
for i:=ans[0] downto 1 do
        begin
        temp:=temp * 10 + ans[i];
        ans[i]:=temp div p;
        temp:=temp mod p;
        end;
while (ans[ans[0]]=0) do dec(ans[0]);
end;

PROCEDURE MakeOrder;
var
        i                       :Integer;
begin
fillchar(order,sizeof(order),0);
order[1][1][0]:=1;
order[1][1][1]:=2;
order[2][1][0]:=1;
order[2][1][1]:=5;
for i:=2 to 300 do
        begin
        order[1][i]:=mul(order[1][i-1],2);
        if order[1][i][0]>80 then break;
        end;
for i:=2 to 300 do
        begin
        order[2][i]:=mul(order[2][i-1],5);
        if order[2][i][0]>80 then break;
        end;
end;

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

PROCEDURE Readin(var n:BigNum);
var
        save                    :BigNum;
        ch                      :Char;
begin
n[0]:=0;
total_2:=0;
total_5:=0;
total_10:=0;
while not eoln do
        begin
        inc(n[0]);
        read(ch);
        n[n[0]]:=ord(ch)-48;
        end;

save:=n;
change(save);

writeln;
write('1 / ');
print(save);
writeln(' =');

while (n[n[0]]=0) do
        begin
        dec(n[0]);
        inc(total_10);
        end;
readln;
change(n);
end;

PROCEDURE Writeout;
var
        i,j                             :Integer;
begin
if (total_2=0)and(total_5=0)and(total_10=0) then
        begin
        writeln(1);
        exit;
        end;
write('0.');
if (total_2=0)and(total_5=0) then j:=total_10-1 else
if total_2=0 then j:=total_10 - order[1][total_5][0] else
        j:=total_10 - order[2][total_2][0];

for i:=1 to j do write(0);



if (total_2=0)and(total_5=0) then write(1)
        else
        if total_2=0 then print(order[1][total_5])
                else print(order[2][total_2]);
writeln;
end;

BEGIN
//assign(input,'p.in');
//reset(input);
MakeOrder;
writeln('Problem 4 by team x');
while not eof do
        begin
        Readin(n);
        while not odd(n[1]) do
                begin
                inc(total_2);
                inc(total_10);
                divp(n,2);
                end;
        while (n[1]=0) or (n[1]=5) do
                begin
                inc(total_5);
                inc(total_10);
                divp(n,5);
                end;


        writeOut;

        end;
writeln('End of problem 4 by team x');
END.

⌨️ 快捷键说明

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