admin 管理员组文章数量: 1086019
2024年12月22日发(作者:web服务器搭建win7)
福 建 电 脑
UJIAN CoMpUTER
DOI:10.167070.enki.fjpc.2016.06.068
任意精度的十进制与N进制之间的转换算法
颜
(广东白云学院
慧
电气与信息工程学院广东广州510450)
【摘要】进制之间的相互转化是常见的问题,人们日常习惯使用的是十进制,而计算机中常用的是二进制、八进制
与十六进制等。本文探讨了如何实现任意精度的十进制与其他进制之间的相互转换。
【关键字】十进制;进制转换;任意精度
0引言
进位制是一种计数的方法,采用有限的数字符号来代表所
有的数值,同一个数,可用采用不同的进位制来表示。在进制
中,可用数字符号的数目称为基数,根据基数n的多少,我们将
其称为n进制。常见的进制有十进制、二进制、八进制、十六进
制等。人们在日常生活中常用的是十进制;在计算机中,数据的
存储、传输和处理多采用二进制来表示;在程序中也常用到八
进制和十六进制来表示数,这就涉及到进制之间的转换。
Windows操作系统自带的计算器小程序可以实现常见进制
之间的相互转换,但是只能对整数进行转换,不可以对小数进
行转换,不具备对指定精度的小数进行数制转换的功能。
而文本中提出的算法实现了十进制与N进制之间的转换,
不但可以转换整数,还可以转换任意精度的小数,并且可以根
据要转换的数值的精度给出相应精度的结果。
1十进制转换为N进制
在实现将十进制转换为常见进制时,对十进制数的整数部
分除基取余,逆序输出:小数部分乘基取整,顺序输出的方法来
求解。例如,将十进制数(13.25)10转换为二进制的过程如下图
所示:
O25 越
2
X 2
2
●舯
× 2
O l
●
在十进制转换到其他进制的过程中,整数部分除基取余,
产生的余数逆序输出;小数部分乘基取整,产生的整数顺序输
出。而栈和队列都是特殊的线性表,栈的操作特性是先进后出,
队列的操作特性是先进先出,正好可以利用栈的特性来处理转
换过程中产生的余数,用队列来处理转换过程中产生的整数。
例如,十进制数(13.25),。,要将其转化为二进制数,其整数
部分为13,用l3除2,得到商数6和余数1,将余数1放入栈
中:当商数不为0,继续用商数除2,得到新的商数3和新的余数
0,余数入栈,重复这个过程,直到商数为0,循环结束。从栈中依
次弹出栈顶元素,直到栈为空,得到十进制数(13.25) 。整数部分
13对应的二进制数为1 101。十进制数(13.25) 。的小数部分则用
乘基取整,顺序输出的方法,每次将小数部分乘以基数后所得的
整数入队列,再取结果的小数部分重复该过程,直到达到所要求
的精度后,将队列中的元素依次出队列即可得到十进制数
(13.25) 。对应的小数部分为0.01,将所求得的整数部分与小数
部分合并即可得到要转化的结果,即十进制数(13.25)。。对应的
二进制数为(1 101.01)2。
将十进制数转换为N进制数的算法如下:
,,分离十进制数中的整数部分,并除基取余,将余数入栈
public void appartlntO
f
i=str.indexOf( .
if(i==-I)
er=Integer.parseInt(str);
else
m=Integcr.parseInt(str.substring(O,i));
d0
{
e=m%n:
s.push(e);//余数入栈
er=m/n;
}while(m!--o);
l
,,分离十进制数中的小数部分,并乘基取整,将乘得的整数
入队列
public void appartDecimal0
{
i=str.indexOf( .’;
if(i!=-1)
{substr-=str.substring(i+1);
len=subs ̄.1engthO;
substr=-”O.”+substr;
d=Double.parseDouble(substr);
if(str.indexOf( . !=-1)
{
f0r(i=O;i<len;i++)
(
d=d n:
e=(int)d;
q.enqueue(e);
d=d—e;
)
l
}
}
//将整数部分与小数部分合并
20l6年第6期f福建电脑 ·139·
L一{量..堡…堕~
UJlAm COMPUTER
public void trantoN0 {ch=str.charAt(j);
{while(s.isEmpty01=true)
{e=s.popO;
str
_
if(ch!= .,1
{m=str.charAt(j)-仃
sum+=m Math.pow(n,k);
k++:
resuh=str
resuh.concat(e+…’);
_
}
if(q.isEmpty0 1=true)
{str resuh=str_resuh.concat(”.”);
l
}
}
while(q.isEmpty0 1=tue)r
{e=q.dequeue0;
str
_
3结束语
resuh=str
resuh.concat(e+””);
_
本文探讨了如何使用字符串、栈和队列等数据结构来解决
十进制与常规进制之间的转换。在将十进制转换成常规进制
时,利用字符串来存储和处理十进制数;将十进制的整数部分
和小数部分分开处理,整数部分采用除基取余法,利用栈先进
后出的特性来存储余数,获得所求N进制的整数部分;小数部
}
)
}
在该算法的基础上,可以实现十进制到任意进制的转换。
2 N进制数转换为十进制数
分采用乘基取整法,利用队列先进先出的特性来存储乘基所得
将其他进制数转换为十进制,采用按位权展开求和的方
法。例如,将二进制数(1011.1)2转化为十进制数的过程如下:
(1011.1)2=1x2一l+lx20+lx21+Ox22+l ̄23=(11.5)1o。在将N进制
数转换成十进制数的过程中,利用字符串来处理N进制数,从
N进制数的最后一位数字开始按位权展开求和。算法如下所
示:
的整数,获得所求N进制的小数部分;最后将求得的N进制数
的整数部分和小数部分合并。在将N进制数转换成十进制数
时,则采用按位权展开求和的方法,利用字符串的基本操作来
实现转换的过程。
参考文献:
[1]叶核亚.数据结构(Java版)(第3版).北京:电子工业出版社.2014年
public void trantoDO
{
[2]李明.大学计算机基础中数制转换两种新方法[J].电脑知识与技术
2011(7):9018—9019.
i=str.indexOf( .,);
if(i!=-1)
【3]刘建波,蔡文水,吕铁山.十进制与任意进制转换的设计与实现[J]
计算机系统应用,2003(10):69—71.
{substr=str.substring(i+1);
len=substr.1ength0;
l
k=-len;
作者简介:
颜慧(1979-),女,广西南宁人,硕士研究生,讲师,研究方向为软
件工程。
for(int j=str.1ength0-1O>=0O--)
(上接第152页)
sting sqlrshan=”select
txtnumber.Text+ ’:
from stu where number= ’+this.
}
……
.
SqlCommand cmdshan=new SqlCommand(sql,connshan)[4 ̄;
connshan.OpenO;
SqlDataAdapter sdashan=new SqlDataAdapter(cmdshan);
DataTable dtshan=new DataTable0;
sdashan.Fill(dtshan);
connshan.Close0;
cmdshan.Dispose0;
if(dtshan.Rows.Count>0)
4结束语
本文介绍的毕业生档案查询系统,功能够用,操作简单,界
面友善,在学校网站挂网运行效果良好,在毕业生查询档案方
面发挥了积极作用。今后可以继续完善相关功能,如导入毕业
生档案信息时提示导入了多少行四。可以尝试与物流公司系统
联网,对毕业生档案去向信息更加准确定位。
参考文献:
[1]房大伟等著.ASP.NET开发实战1200例[M].北京:清华大学出版
社.2011.6.
{
this.txtname.Text=dtshan.Rows[0][1].ToString0;
this.txtclass.Text=dtshan.Rows[o][2].ToString0;
[2]Pa ̄Deitel,Harvery Deitel著,张思宇等译.Visual c#2010大学教
程——第四版[M].北京:电子工业出版社,2011.10.
[3]张晓蕾.c撑程序设计实用教程[M].北京:人民邮电出版社,2010.
[4]明日科技,郑齐心,房大伟等编著.ASP.NET项目开发案例全程实录
[M].北京:清华大学出版社,2012.1.
[5]陈佛敏,陈博.SQL Server 2008数据库应用教程[M]一b京:科学出版
社.2014.11.
this.txtpostnumber.Text=dtshan.Rows[0][4].ToStringO;
this.txtaddress.Text=dtshan.Rows[o][5].ToStirng0;
this.txtremark.Text=dtshan.Rows[0][6].ToString0;
}
else
this.Label5.Text=”查无此人,请检查身份证号是否正确”;
·
140· 福建电脑』2o16年第6期
版权声明:本文标题:任意精度的十进制与N进制之间的转换算法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1734921237a1609424.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论