noip2000-fjz-进制转换 2008.11.5

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.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值