noip2000-fjz-进制转换 2008.11.5
算法:
1.负进制,短除法,但是余数小于0时要从上一位借位(商+1,余数-进制数)
2.遇到此类题目,肯定是对原来的进制转换有所改进的,所以,对规则若不确定可以多写几个连蒙带猜的,必定可以通过!
3.Wa,题中说的是r:-2,-3,….-20,不能想当然的认为是到-16—一定要看清题中的每一个字!
program fjz;
const fin='fjz.in';fout='fjz.out';
p:array[0..19]of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J');
var x,r,y:longint;
f1,f2:text;
a:array[1..10000]of char;
procedure deal(x,r:longint);
var la,i,x1:longint;
begin
la:=0; x1:=x;
repeat
y:=x mod r;
if y<0 then begin y:=y-r;x:=x div r+1 end
else x:=x div r;
inc(la);a[la]:=p[y];
until x=0;
write(f2,x1,'=');
for i:=la downto 1 do
write(f2,a[i]);
writeln(f2,'(base',r,')');
end;
begin
assign(f1,fin);reset(f1);
assign(f2,fout);rewrite(f2);
repeat
readln(f1,x,r);
if r<>0 then deal(x,r);
until eof(f1);
close(f1);
close(f2);
end.