Wikioi 天梯 十进制转m进制(1474)

来源:互联网 发布:echarts饼图显示数据 编辑:程序博客网 时间:2024/04/29 13:33

将十进制数n转换成m进制数 m<=16

n<=100

共一行

n和m

共一个数

表示n的m进制

样例1:10 2

样例2:100 15

样例1:1010

样例2:6A

用反向取余法





说实话,wikioi天梯里普及一等以前的题怎么看都有点教程的性质~~

关于十进制转m进制的方法,题目下面给得清清楚楚,那么我的任务就是具体讲解一下“反向取余法”的步骤。

我们首先以十进制下的18为例,假定我们要把它转化为3进制……

由于笔者写博客技术不精,不会构造演算过程,下面贴一张不太雅观的图片~~




上图是笔者弱弱的演算,描述一下就是:

18除3商6,余0,记下余数零;6继续除3商2,记下余数0;3除不了2了,记下余数2(商0余2);除不了了,就把记过的余数从底向上写一遍——200就是3进制下的18;

当把一个十进制数转化为m进制时,你要不断用m去除原数,每次运算记录余数,直到商小于1,然后把记录的余数自底向上写一遍,就得到了m进制下的原数。

简单说一下我的理解就是(仅供参考):十进制下的一个m就是m进制下的10,19除三商六,三进制下的该数中就包含6个“10”,余下的1在三进制中凑不成“10”,就留在了个位……(没懂吧…不严谨的表达从来难以听懂…要是有人懂了,笔者就乐疯了…)

具体实现时,由于先得到的余数后输出,所以可以想到用栈或者递归来实现。

顺带一提,这式子(计算)叫短除法;


算法描述:读入数据;不断递归进行除法,直到商为零时终止递归,跳栈时输出本层递归所得余数。




Program asd;Varx,d:longint;Consta:array[0..16]of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G');Procedure zhuan(bb,dd:longint);beginif (bb div dd)=0 then begin write(a[bb]);exit;end;zhuan(bb div dd,dd);write(a[bb mod dd]);end;Beginreadln(x,d);zhuan(x,d);End.