主题:答出来的以后加倍++++分!!!
shenrenahuatian
[专家分:60] 发布于 2005-08-18 21:06:00
设计一个程序,读入一个十进制整数和一个负进制数的基数,并将此十进制数转换为此负进制下的数:-R∈{-2,-3,-4,…,-20},要求输入的每一行有两个数,十进制数和负进制的基数。
回复列表 (共5个回复)
沙发
口口and枕头 [专家分:1550] 发布于 2005-08-18 22:00:00
看不懂题`
板凳
林记 [专家分:1680] 发布于 2005-08-19 14:25:00
自己看程序
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 楼
阿Ben [专家分:2200] 发布于 2005-08-22 23:18:00
好像是第六届NOIP的第一题……
4 楼
阿Ben [专家分:2200] 发布于 2005-08-22 23:21:00
如果真是第六届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 楼
lzl1403 [专家分:1670] 发布于 2005-08-24 00:47:00
或许可以到大榕树找一下当年的解题报告,或搜索一下,就能理解解题思路了
我来回复