进制转化的编程问题 PASCAL

来源:百度知道 编辑:UC知道 时间:2024/06/07 01:36:36
将m进制的数x转化为n进制的数y
x,y为实数(恩 重点是实数!不包括无限小数,但包括正负有限小数) m,n为大于1的正整数;

解法尽量简洁;

除,然后取余

小数部分一样的

一般用递归就行,也可以用repeat循环完成,还可以用栈优化。

一、数的进制的概念:

日常生活中我们计数的方式有很多,如一年有12个月,则是12进制,一周有7天,则是7进制,等等。实际都是我们人为规定的,而平常我们用的最多的最习惯的是10进制,是因为我们古人留下来的财富,而古人是因为有10个手指便于帮助计数。需要强调的是任何一个值都可以用任何一种进制描述,但它的值是不变的,正如我们今天在一周中可以描述为星期几,在一月中描述为多少号一样。

使用R进制计数的规则:

1、 只使用R个基数:0,1,2,……,R-1;

2、 逢R进一,退一当R进行数的运算。

二、R进制数转化为十进制数

这个转化问题较简单,根据上面讲的R进制的计数规则进行展开就得到相应的十进制数的表示方法。

(anan-1……a1a0.a-1a-2……a-m)R

=an*Rn+an-1*Rn-1+……+a1*R1+a0*R0+a-1*R-1+a-2*R-2+……+a-m*R-m

=
三、十进制数转化为R进制数

由于十进制数的整数与小数转化为R进制的方法不同,所以必须分开讨论。先看十进制整数的转化,再讨论十进制小数的转化,最后讨论-R进制的计数及转化问题。

1、 十进制整数的转化

通过具体实例进行分析,如对十进制数325转化,根据原理可以按下式这样假设:

(325)10=3*102+2*101+5*100

=(anan-1……a1a0)R

= an*Rn+an-1*Rn-1+……+a1*R1+a0*R0

=(an*Rn-1+an-1*Rn-2+……+a1)*R+a0

两边同时除以R,得到整数部分和整数部分相等,余数和余数相等,显然右边的余数就是a0,再进