进制转化的编程问题 PASCAL
来源:百度知道 编辑:UC知道 时间:2024/06/07 01:36:36
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,再进