加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

任意长度的十进制数转为二进制、十六进制,和大数除法算法(只有

发布时间:2020-12-14 03:24:55 所属栏目:大数据 来源:网络整理
导读:辗转求余法实现的任意长度十进制数到2进制和16进制转换方法 Sub asdf()Debug.Print Dec2Bin("3214123412351234123415123412351234123451235123412341234")Debug.Print Dec2Hex("3214123412351234123415123412351234123451235123412341234")End Sub'任意长度

辗转求余法实现的任意长度十进制数到2进制和16进制转换方法


Sub asdf()
Debug.Print Dec2Bin("3214123412351234123415123412351234123451235123412341234")
Debug.Print Dec2Hex("3214123412351234123415123412351234123451235123412341234")
End Sub


'任意长度的10进制数的整除运算,除数为2
Function Div2(devidend As String) As String
? ? Dim Remain As Boolean ? '当前数位是否有余数
? ? For i = 1 To Len(devidend)
? ? ? ? Dim CuInt As Integer
? ? ? ? CuInt = IIf(Remain,10,0) + Mid(devidend,i,1) '上一位有余数时,加到当前数位上再做除法
? ? ? ? Remain = Not (CuInt Mod 2 = 0)
? ? ? ? Div2 = Div2 & CuInt  2
? ? Next i
End Function


'任意长度的10进制数对2求余(判断最后一位数字是奇数还是偶数)
Function Mod2(devidend As String) As Integer
? ? Mod2 = IIf(Right(devidend,1) Mod 2 = 1,1,0)
End Function


'任意长度的10进制数转为2进制,辗转求余
Function Dec2Bin(devidend As String) As String
? ? Dim res As String
? ? res = devidend
? ? Do
? ? ? ? Dec2Bin = Mod2(res) & Dec2Bin
? ? ? ? res = Div2(res)
? ? Loop Until (res = 0)
End Function


'任意长度的10进制数转为16进制(先转成2进制,再转成16进制)
Function Dec2Hex(devidend As String) As String
? ? Dim res As String
? ? res = Dec2Bin(devidend)
? ? If Len(res) Mod 4 > 0 Then res = String(4 - (Len(res) Mod 4),"0") & res '补齐起始4位
? ? For i = 1 To Len(res) - 3 Step 4
? ? ? ? Dec2Hex = Dec2Hex & Hex(Mid(res,1) * 8 + Mid(res,i + 1,1) * 4 + Mid(res,i + 2,1) * 2 + Mid(res,i + 3,1))
? ? Next i
End Function

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读