[洛谷1143]进制转换

第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)

第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000

第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

 

先把一个数n进制的数转化成10进制的数,再把一个10进制的数转化成一个m进制的数

 

 

把一个n进制数x转换成10进制,x以字符串形式出现,以数值形式返回

function p(n:longint;s:string):longint;
var i:longint;
begin
    p:=0;
    for i:=1 to length(s) do 
       begin
           p:=p*n;
           if s[i]='A''B'C'D'E'F'.... then Inc(p,ord(s[i])-ord('A')+10)
           else inc(p,ord(s[i])-48);
       end;
end;

 

把一个10进制数x转换成n进制,f是早打好的该进制中的数表

while x<>0 do 
    begin
        inc(k);
        a[k]:=x mod n;
        x:=x div n;
    end;
for i:=1 to k do 
    write(f[a[i]]);

 

 

 

巨恶心无比的代码

const
    two:array[0..1] of char=('0','1');
    three:array[0..2] of char=('0','1','2');
    four:array[0..3] of char=('0','1','2','3');
    five:array[0..4] of char=('0','1','2','3','4');
    six:array[0..5] of char=('0','1','2','3','4','5');
    seven:array[0..6] of char=('0','1','2','3','4','5','6');
    eight:array[0..7] of char=('0','1','2','3','4','5','6','7');
    nine:array[0..8] of char=('0','1','2','3','4','5','6','7','8');
    eleven:array[0..10] of char=('0','1','2','3','4','5','6','7','8','9','A');
    twelve:array[0..11] of char=('0','1','2','3','4','5','6','7','8','9','A','B');
    thirteen:array[0..12] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C');
    fourteen:array[0..13] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D');
    fifteen:array[0..14] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E');
    sixteen:array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

var a:array[0..100000] of longint;
    i,j,k,n,x,m:longint;
    y:string;
    ch:char;

procedure shiliu(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 16;
            n:=n div 16;
        end;
    for i:=k downto 1 do
        write(sixteen[a[i]]);
end;
procedure shiwu(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 15;
            n:=n div 15;
        end;
    for i:=k downto 1 do
        write(fifteen[a[i]]);
end;
procedure shisi(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 14;
            n:=n div 14;
        end;
    for i:=k downto 1 do
        write(fourteen[a[i]]);
end;
procedure shisan(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 13;
            n:=n div 13;
        end;
    for i:=k downto 1 do
        write(thirteen[a[i]]);
end;
procedure shier(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 12;
            n:=n div 12;
        end;
    for i:=k downto 1 do
        write(twelve[a[i]]);
end;
procedure shiyi(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 11;
            n:=n div 11;
        end;
    for i:=k downto 1 do
        write(eleven[a[i]]);
end;
procedure jiu(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 9;
            n:=n div 9;
        end;
    for i:=k downto 1 do
        write(nine[a[i]]);
end;
procedure ba(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 8;
            n:=n div 8;
        end;
    for i:=k downto 1 do
        write(eight[a[i]]);
end;
procedure qi(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 7;
            n:=n div 7;
        end;
    for i:=k downto 1 do
        write(seven[a[i]]);
end;
procedure liu(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 6;
            n:=n div 6;
        end;
    for i:=k downto 1 do
        write(six[a[i]]);
end;
procedure wu(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 5;
            n:=n div 5;
        end;
    for i:=k downto 1 do
        write(five[a[i]]);
end;
procedure si(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 4;
            n:=n div 4;
        end;
    for i:=k downto 1 do
        write(four[a[i]]);
end;
procedure san(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 3;
            n:=n div 3;
        end;
    for i:=k downto 1 do
        write(three[a[i]]);
end;
procedure er(n:longint);
begin
    while (n<>0) do
        begin
            inc(k);
            a[k]:=n mod 2;
            n:=n div 2;
        end;
    for i:=k downto 1 do
        write(two[a[i]]);
end;
procedure shi(n:longint);
begin
    writeln(n);
end;
function change(n:longint;s:string):longint;
var i:longint;
begin
    change:=0;
    for i:=1 to length(s) do
        begin
            change:=change*n;
            if (s[i]='A')or(s[i]='B')OR(S[I]='C')OR(S[I]='D')OR(S[I]='E')OR(S[I]='F') then
                change:=change+(ord(s[i])-ord('A')+10)
            else change:=change+(ord(s[i])-48);
        end;
end;
begin
    readln(n);
    readln(y);
    readln(m); 
    if y='0' then
        begin
            writeln(0);
            halt;
        end;
    x:=change(n,y);
    case m of
        2:er(x);
        3:san(x);
        4:si(x);
        5:wu(x);
        6:liu(x);
        7:qi(x);
        8:ba(x);
        9:jiu(x);
        10:shi(x);
        11:shiyi(x);
        12:shier(x);
        13:shisan(x);
        14:shisi(x);
        15:shiwu(x);
        16:shiliu(x);
    end;
end.

 

你可能感兴趣的:([洛谷1143]进制转换)