回 帖 发 新 帖 刷新版面

主题:答出来的以后加倍++++分!!!

设计一个程序,读入一个十进制整数和一个负进制数的基数,并将此十进制数转换为此负进制下的数:-R∈{-2,-3,-4,…,-20},要求输入的每一行有两个数,十进制数和负进制的基数。

回复列表 (共5个回复)

沙发

看不懂题`

板凳

自己看程序

var
n,r,t:integer;
result:array [0..1000] of integer;
begin
result[0]:=0;
readln(n,r);
repeat
  t:=n mod r;
  n:=n div r;
  if t<0 then
   begin t:=t-r;inc(n);end;
  inc(result[0]);
  result[result[0]]:=t;
until n=0;
for t:=result[0] downto 1 do write(result[t]);
writeln('(Base:',r,')');
readln;
end.

3 楼

好像是第六届NOIP的第一题……

4 楼

如果真是第六届NOIP的第一题,那么就看以下程序吧:
const
  maxlen=100;
var
  n:integer;
  base:integer;
  a:array[1..maxlen]of integer;
  len:integer;
procedure init;
  var
    i:integer;
  begin
    readln(n,base);
    len:=0;
  end;
procedure main;
  var
    n1,n2,modn:integer;
    i:integer;
  begin
    n1:=n;
    repeat
      inc(len);
      n2:=n1 div base;
      modn:=n1-n2*base;
      if modn<0 then begin
        inc(n2);
        modn:=n1-n2*base;
      end;
      a[len]:=modn;
      n1:=n2;
    until (abs(n1)<abs(base))and(n1>0);
    inc(len);
    a[len]:=n1;
  end;
procedure out;
  var
    i:integer;
  function hex2chr(x:integer):char;
    begin
      if x in [0..9] then hex2chr:=chr(ord('0')+x)
      else hex2chr:=chr(ord('A')-10+x);
    end;
  begin
    write(n,'=');
    for i:=len downto 1 do
      write(hex2chr(a[i]));
    writeln('(base ',base,')');
  end;
begin
  init;
  main;
  out;
end.

5 楼

或许可以到大榕树找一下当年的解题报告,或搜索一下,就能理解解题思路了

我来回复

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