P1017 进制转换

来源:互联网 发布:周笔畅淘宝店服装 编辑:程序博客网 时间:2024/05/21 09:12

题目描述

给出一个十进制数N,转化为负进制-R,若基数超过10,则按十六进制的方式处理。

样例输入

30000 -2

样例输出

30000=11011010101110000(base-2)

思路

O(log n)倒除法,注意的是负整数取模后是正整数取模的相反数,所以要减去它的除数。
var  n,i,x,y:longint;  s:string;begin  readln(n,x);  write(n,'=');  if n=0 then begin writeln(0,'(base',x,')');exit;end  else    if n=1 then begin writeln(1,'(base',x,')');exit;end  else    repeat      y:=n mod x;      n:=n div x;      if y<0 then        begin          inc(n);          y:=y-x;        end;      y:=y+48;      if y>=58 then y:=y+7;      s:=chr(y)+s;    until n=0;  writeln(s,'(base',x,')');end.
1 0