回 帖 发 新 帖 刷新版面

主题:求救!!!!(加分)

【问题描述】
所罗门统治以色列----犹太王国时期,他在耶路撒冷锡安山上建筑豪华的宫殿和神庙,在“亚伯拉罕圣岩”下修建有地下室和秘密隧道。据说所罗门把大量的金银珠宝存放在这里。这就形成了举世闻名的“所罗门财宝之迹”。 
假设所罗门修建的秘密隧道有很多道门,每道门上都有一个编码,知道这个编码对应的密码才能将门打开,在隧道中通行。
已知每道门的密码是采用进制转换的方式生成的。你只要知道生成密码的进制转换方式,你就能解开该道门的密码,打开门了。
现在把门上的编码和解密方式告诉你,请你帮忙算出开门的密码。
【输入格式】
输入文件包含两行,第一行为门上的编码,第二行为解密方式。
门上编码是一个 M进制的数,其对应的十进制数小于2000000000;解密方式以M->N的格式给出,表示要从M进制转换成N进制,就能解出密码了。(其中M、N均为大于1并且小于37的整数)
当计数制度为十一进制时,其包括的数字为:0、1、2、3、4、5、6、7、8、9、A;…;依此类推:当计数制度为三十六进制时,其包括的数字为:0、1、2、3、4、5、6、7、8、9、A、B、C、…、Z 。

【输出格式】
输出文件只有一个数:开门密码。
【输入输出样例】

    输入样例    输出样例
样例1    1310->2    1101
样例2    345->8    23
样例3    548->16    2C
样例5    2X35->9    125


回复列表 (共2个回复)

沙发

var s:string;
    a,b,x:byte;
    ch1,ch2:char;
    t,h,i:longint;
begin
  assign(input,'???');
  reset(input);
  readln(s);
  read(ch1,ch2);
  a:=ord(ch1)-48;
  if ch2='-' then read(ch2)
             else begin a:=a*10+ord(ch2)-48; read(ch1,ch2); end;
  read(ch1);
  b:=ord(ch1)-48;
  while not(eoln) do
    begin
      read(ch2);
      b:=b*10+ord(ch2)-48;
    end;
  close(input);
  assign(output,'???');
  rewrite(output);
  if a=b then writeln(s) else
    begin
      t:=1; h:=0;
      for i:=length(s) downto 1 do
        begin
          x:=ord(s[i]);
          if x<65 then x:=x-48
                  else x:=x-55;
          h:=h+t*x;
          t:=t*a;
        end;
      s:='';
      repeat
        x:=h mod b;
        h:=h div b;
        if x>10 then s:=chr(x+55)+s
                else s:=chr(x+48)+s;
      until h=0;
      writeln(s);
    end;
  close(output);
end.

板凳

begin
  assign(input,'??');reset(input);
  assign(output,'??');rewrite(output);
  readln(st1);readln(st2);
  m:=0;n:=0;k:=pos('-',st2);
  for i:=1 to k-1 do m:=m*10+ord(st2[i])-48;
  delete(st2,1,k+1);l:=length(st2);
  for i:=1 to l do n:=n*10+ord(st2[i])-48;
  l:=length(st1);k:=1;shi:=0;
  for i:=1 to l do
   begin
     k:=ord(st1[i])-48;
     if k>9 then k:=k-7;
     shi:=shi*m+k
   end;
  st1:='';
  while shi>0 do
   begin
     k:=shi mod n;shi:=shi div n;
     if k>9 then k:=k+7;
     st1:=chr(k+48)+st1
   end;
  writeln(st1);
  close(input);close(output)
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册