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

📄 p1272.pas

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

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

VAR
        i                               :Longint;
        per,total                       :array[1..23]of BigNum;
        s,ans                           :String;
        zero,d                          :BigNum;

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

FUNCTION add(a,b:BigNum):BigNum;
var
        i,temp                          :Integer;
begin
temp:=0;
for i:=b[0] downto a[0]+1 do a[i]:=0;
for i:=1 to b[0] do a[i]:=a[i] + b[i];
if b[0]>a[0] then a[0]:=b[0] ;
for i:=1 to a[0] do
        begin
        temp:=temp + a[i];
        a[i]:=temp mod 10;
        temp:=temp div 10;
        end;
while (temp>0) do
        begin
        inc(a[0]);
        a[a[0]]:=temp mod 10;
        temp:=temp div 10;
        end;
add:=a;
end;

FUNCTION Decp(a,b:BigNum):BigNum;
var
        i,temp                          :Longint;
begin
temp:=0;
for i:=1 to b[0] do a[i]:=a[i]-b[i];
for i:=1 to a[0]-1 do
        if a[i]<0 then
                begin
                a[i]:=10 + a[i];
                dec(a[i+1]);
                end;
while (a[0]>1) and (a[a[0]]=0) do dec(a[0]);
decp:=a;
end;

PROCEDURE Print(var t:BigNum);
var
        i                               :Longint;
begin
for i:=t[0] downto 1 do
        begin
        if (i mod 3=0)and(i<>t[0]) then write(',') ;
        write(t[i]);
        end;
writeln;
end;

PROCEDURE MakeData;
var
        i                               :Integer;
begin
per[1][0]:=1;
per[1][1]:=1;
total[1][0]:=2;
total[1][1]:=6;
total[1][2]:=2;
for i:=2 to 23 do per[i]:=mul(per[i-1],26);
for i:=2 to 22 do total[i]:=add(total[i-1],per[i+1]);
zero[0]:=1;
zero[1]:=0;
end;

FUNCTION Compare(var a,b:BigNum):Integer;
var
        i                               :Longint;
begin
if a[0]>b[0] then compare:=1 else
if a[0]<b[0] then compare:=-1 else
        begin
        i:=a[0];
        while (i>1) and (a[i]=b[i]) do dec(i);
        if a[i]>b[i] then compare:=1 else
        if a[i]<b[i] then compare:=-1 else
        compare:=0;
        end;
end;

PROCEDURE Changetochar;
var
        i,j                             :Longint;
        data                            :BigNum;
begin
data[0]:=length(s);
for i:=1 to data[0] do data[data[0]-i+1]:=ord(s[i])-48;
d:=data;

ans:='';
for i:=1 to 23 do
        if compare(total[i],data)>=0 then break;

if i>1 then decp(data,total[i-1]);



while (compare(data,zero)>0) do
        begin
        j:=0;

        while (compare(data,per[i])>=0) do
                begin
                data:=decp(data,per[i]);
                inc(j);
                end;

        ans:=ans+chr(j+ord('a')-1);
        dec(i);
        end;
end;

PROCEDURE changetonum;
var
        i,j                             :Integer;
begin
ans:=s;
d[0]:=1;
d[1]:=0;
if length(ans)>1 then d:=total[length(ans)-1];

for i:=1 to length(s) do
        for j:=ord('a') to ord(s[i])-1 do
                d:=add(d,per[length(s)-i+1]);

d:=add(d,per[1]);
end;

BEGIN
//assign(input,'p.in');
//reset(input);
MakeData;
readln(s);
while (s<>'*') do
        begin
        if (s[1]>='0') and (s[1]<='9') then changetochar
                else changetonum;
        write(ans);
        for i:=length(ans)+1 to 22 do write(' ');
        print(d);
        readln(s);
        end;
END.

⌨️ 快捷键说明

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