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

辗转求余法实现的任意长度十进制数到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, i, 1) * 8 + Mid(res, i + 1, 1) * 4 + Mid(res, i + 2, 1) * 2 + Mid(res, i + 3, 1))
    Next i
End Function


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将十进制转为二进制、八进制和十六进制的方法: 1. 将十进制转为二进制:使用bin()函,该函返回一个字符串,表示给定整二进制形式。例如,将十进制10转换为二进制,可以使用以下代码: ```python dec_num = 10 bin_num = bin(dec_num) print("The binary representation of", dec_num, "is", bin_num) ``` 输出结果为: ``` The binary representation of 10 is 0b1010 ``` 可以看到,bin()函返回的字符串以“0b”开头,表示这是一个二进制。 2. 将十进制转为八进制:使用oct()函,该函返回一个字符串,表示给定整的八进制形式。例如,将十进制10转换为八进制,可以使用以下代码: ```python dec_num = 10 oct_num = oct(dec_num) print("The octal representation of", dec_num, "is", oct_num) ``` 输出结果为: ``` The octal representation of 10 is 0o12 ``` 可以看到,oct()函返回的字符串以“0o”开头,表示这是一个八进制。 3. 将十进制转为十六进制:使用hex()函,该函返回一个字符串,表示给定整十六进制形式。例如,将十进制10转换为十六进制,可以使用以下代码: ```python dec_num = 10 hex_num = hex(dec_num) print("The hexadecimal representation of", dec_num, "is", hex_num) ``` 输出结果为: ``` The hexadecimal representation of 10 is 0xa ``` 可以看到,hex()函返回的字符串以“0x”开头,表示这是一个十六进制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值